<b>概念:</b>本文中的“提取工廠類”是指如果要建立的對象很多,則代碼會變的很複雜。一種很好的方法就是提取工廠類。
<b>正文:</b>一般來說我們需要在代碼中設定一些對象,以便獲得它們的狀态,進而使用對象,所謂的設定通常來說就是建立對象的執行個體并調用對象 的方法。有時如果要建立的對象很多,則代碼會變的很複雜。這便是工廠模式發揮作用的情形。工廠模式的複雜應用是使用抽象工廠建立對象集,但我們在這裡隻是 使用基本的工廠類建立對象的一個簡單應用。
如下代碼所示,New方法包含建立類的整個邏輯,如果現在要建立的類比較多而且邏輯比較複雜的話(如根據不同條件建立對象,什麼時候建立對象),我 們的New方法邏輯會變得很大,同時代碼也變得很難維護。是以我們就會采用提取工廠類的方式進行提煉。
namespace LosTechies.DaysOfRefactoring.ExtractServiceClass.Before
{
public class PoliceCarController
{
public PoliceCar New(int mileage, bool serviceRequired)
{
PoliceCar policeCar = new PoliceCar();
policeCar.ServiceRequired = serviceRequired;
policeCar.Mileage = mileage;
return policeCar;
}
}
}
那麼重構後的代碼如下,New方法變得很簡單了,指需要調用實作接IPoliceCarFactory 接口的PoliceCarFactory 類就可以傳回對象,這樣就隔開了建立對象的邏輯,如果需求現在變為根據不同的條件建立不 同的對象,什麼時候建立對象等都變成了比較簡單的事情,在後期可以把對象都配置在XML裡面,使用反射的方式實作IOC注入建立。
<b>總結:</b>這個重構經常會在項目中使用,如果要建立的對象是一個,你可以采用簡單工廠,但是這種方式還是會存在很多依賴,維護起來也比較 不友善。是以推薦使用工廠方法模式,把執行個體化延遲到子類。如果你要建立一系列的對象,那麼就推薦你使用抽象工廠模式,但是要注意不要過度設計,隻要能滿足 不斷變化的需求和給以後的維護和重構帶來友善即可。
本文轉自KnightsWarrior51CTO部落格,原文連結: http://blog.51cto.com/knightswarrior/342473,如需轉載請自行聯系原作者