應用 Composed Method 模式
這大概是最簡單的模式之一了,甚至可能有人會覺得如此簡單的咚咚居然被成爲“模式”是非常可笑的。不過,Kent Beck 曾說過:“some of his best patterns are those that he thought someone would laugh at him for writing.”Kent 就是在他的 Smalltalk Best Practice Patterns 一書提出這個模式:Composed Method。
良好的 Composed Method 的特徵是,在方法體中,所有的代碼段都處於同樣的細節級別之上。比如說上圖中上半部分所展示的代碼,最內層 if 結構中的代碼表達的是如何擴展該類使用的存儲結構,而倒數第三句表達的是添加一個元素。也就是說前者是關於該類內部細節的,而後者是關於該類外部行爲的。 重構之後的代碼,則顯得乾淨漂亮很多,三段代碼都處於同樣的細節級別之上,而命名良好的小方法也更容易讓人理解這段代碼的含義。
在重構爲 Composed Method 模式的過程中,常常會多次反覆應用 Extract Method 過程,直到目標 Composed Method 中大部分(並非所有)工作都是通過調用其他方法完成的。如果抽取了太多的代碼放到一個方法中,那麼有可能會使得你找不到一個合適的名字來命名這個新的方法。在這種情況下,就需要應用 Inline Method 過程將這些代碼放回原來的方法中去,再想想別的辦法將之解構。
如果在這項重構的過程中,在同一個類裏面產生了大量由 Composed Method 調用的私有小方法,那麼就可能需要應用 Extract Class 過程進一步進行重構。