簡單工廠模式的缺點:
1.新增功能類後,需要在工廠類中增加判斷分支,破壞了「開放-封閉」原則;
2.當判斷分支的邏輯很複雜,判斷分支非常多時,一旦出現差錯,可能導致整個工程無法運轉,即責任過重。
優點:1.動態的實現了例項化,即根據客戶端傳過來的字元,自動去例項化對應的例項;
2.將客戶端與產品類完全的分離開,實現了松耦合。
而工廠方法模式是對簡單工廠模式的一次昇華,去其槽粕,取其精華。具體是怎麼實現的呢?簡單說,就是對工廠類再一次的進行抽象,擴大封裝的維度,即抽象出乙個抽象工廠類,把原來每乙個if判斷分支封裝到每乙個具體的工廠類中。還以計算器為例。
抽象工廠父類
public abstract class ioperato***ctory
各個具體的工廠子類
public class addoptfactory extends ioperato***ctory
}public class suboptfactory extends ioperato***ctory
}public class muloptfactory extends ioperato***ctory
}public class divoptfactory extends ioperato***ctory
}客戶端做如下修改
ioperato***ctory factory = new addoptfactory();
operator operator = factory.createfactory();
operator.num1 = num1;
operator.num2 = num2;
optresult = operator.getresult();
當我們需要增加乙個功能,比如開根號,那麼久需要增加乙個開根號的類,和乙個開根號的工廠類,並修改客戶端
ioperato***ctory factory = new addoptfactory();//將addoptfactory()換成相應的工廠類
雖然工廠方法模式改善了簡單工程方法中因為修改工廠類而破壞的「開放-封閉」原則,但是顯然如果要擴充套件功能的話,就要修改客戶端。
工廠方法模式相對於簡單工廠模式,在滿足「開放-封閉」原則的同時,將例項化的工作延遲到了各個子工廠類中,責任在就被分擔到各個子類的同時,風險也就被子類分擔了。而且,在某些複雜的分類情況下,如不同結構的不同等級(示例),用工廠方法模式更有助於程式的維護。
當然,工廠方法模式要求我們抽象出工廠父類,以及增加多個具體工廠子類,增加了額外的**量。當分類情況沒有那麼負責時,還是選擇用簡單工廠類。
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...