最單純的Duplicated Code就是[同一個class內的兩個函數含有相同表達式(express)]。這時候你需要做的就是采用Extract Method(110)提煉出重復的代碼,然后讓這兩個地點都調用被提煉出來的那一段代碼。
另一種常見情況就是[兩個互為兄弟(sibling)的subclass內含相同表達式]。要避免這種情況,只需對兩個classes都使用Extract Method(110),然后再對被提煉出來的代碼使用Pull Up Method(332),將它推入superclass內。如果代碼之間是類似,并非完全相同,那么就得運用Extract Method(110)將相似部分和差異部分割開,構成單獨一個函數。然后你可能發現或許可以運用Form Template Method(345)獲得一個Template Method設計模式。如果有些函數以不同的算法做相同的事,你可以擇定其中較清晰的一個,并使用Substitute Algorithm(139)將其他函數的算法替換掉。
如果兩個毫不相關的classes內出現Duplicated Code,你應該考慮對其中一個使用Extract Class(149),
將重復代碼提煉到一個獨立class中,然后在另一個class內使用這個新class。但是,重復代碼所在的函數也可能的確只應該屬于某個class,
另一個class只能調用它,抑或這個函數可能屬于第三個class,而另兩個classes應該引用這第三個class。你必須決定這個函數放在哪個最
合適,并確保它被安置后就不會再在其他任何地方出現。