摘要:工廠方法模式缺點每增加一個產品,就需要額外的增加一個產品工廠的類,增加了額外的開發量。
一、經典工廠方法模式定義:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使得一個類的實例化延遲到了其子類。
/** * 抽象工廠接口,用于創建計算對象 */ public interface IFactory { Calculate getCalculate(); } /** * 抽象計算接口,表示用于實現的業務 */ public interface Calculate { Integer getResult(int a, int b); } /** * 具體工廠類,實現抽象工廠接口,返回一個具體的計算對象 */ class AddFactory implements IFactory{ @Override public Calculate getCalculate() { return new Add(); } } class SubFactory implements IFactory{ @Override public Calculate getCalculate() { return new Sub(); } } class MulFactory implements IFactory{ @Override public Calculate getCalculate() { return new Mul(); } } class DivFactory implements IFactory{ @Override public Calculate getCalculate() { return new Div(); } } /** * 具體操作,實現計算接口 */ class Add implements Calculate { @Override public Integer getResult(int a, int b) { return a + b; } } class Sub implements Calculate { @Override public Integer getResult(int a, int b) { return a - b; } } class Mul implements Calculate { @Override public Integer getResult(int a, int b) { return a * b; } } class Div implements Calculate { @Override public Integer getResult(int a, int b) { return a / b; } } /** * 測試 */ public class Test { public static void main(String[] args) { IFactory factory = new AddFactory(); Calculate calculation = factory.getCalculate(); calculation.getResult(1, 2); } }
工廠方法模式優點:與簡單工廠相比,工廠方法模式克服了簡單工廠違背開放-封閉原則的缺點,又保持了風窗對象創建過程的優點。
簡單工廠模式優點:工廠類中包含了必要的判斷,根據客戶端選擇條件,動態實例化相關的類。
工廠方法模式缺點:每增加一個產品,就需要額外的增加一個產品工廠的類,增加了額外的開發量。
小結:可以看出:工廠方法模式實現時,客戶端需要決定實例化哪一個工廠,選擇判斷還是在的;工廠方法把簡單工廠的內部邏輯判斷移動到了客戶端,原來是更改工廠類,現在是更改客戶端。
二、《Thinking in java》中改動后的工廠模式(使用匿名內部類,客戶端少了實例化具體工廠的步驟)/** * 抽象工廠接口,用于創建計算對象 */ public interface IFactory { Calculate getCalculate(); } /** * 抽象計算接口,表示用于實現的業務 */ public interface Calculate { Integer getResult(int a, int b); } /** * 具體工廠,使用匿名內部類實現接口 */ public class AddFactory implements Calculate{ @Override public Integer getResult(int a, int b) { return a+b; } public static IFactory factory = new IFactory() { public Calculate getCalculate(){ return new AddFactory(); } }; } /** * 將改動的工廠類,做實際運算(可以加入擴展方法,實現各個具體工廠) */ public class Factories { public static Integer getResult() { Calculate calculation = AddFactory.factory.getCalculate(); return calculation.getResult(1, 2); } } /** * 好處:不用改動客戶端 */ public class Test { public static void main(String[] args) { Integer result = Factories.getResult(); System.out.println(result); } }
優點:減少了類的創建次數,只需要創建一個工廠類(經典的工廠方法模式在增加產品時,需要創建具體操作類和具體操作工廠類)
可以使用的手段:
1.客戶端可以不用修改,只修改Factories類的一個方法(實現了對客戶端細節的屏蔽),但只能使用其中一種具體工廠類
2.可增加Factories類中的方法,讓其有多個具體操作類的實現,但是客戶端此時就需要知道有什么方法了,雖然增加了客戶端的負擔,但可實現代碼的復用
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70599.html
摘要:基于工廠角色和產品角色的多態性設計是工廠方法模式的關鍵。工廠方法模式之所以又被稱為多態工廠模式,是因為所有的具體工廠類都具有同一抽象父類。工廠方法模式總結工廠方法模式是簡單工廠模式的進一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態工廠方法...
摘要:二簡單工廠模式組成工廠類工廠模式的核心,通過調用它來實現其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡單工廠模式破壞開閉原則的問題。 一、概念 1、工廠模式分為三類:(1)簡單工廠模式:一個工廠創建所有產品(2)工廠方法模式:一個工廠方法創建一個產品(3)抽象工廠模式:一個工廠方法創建一類產品 2、創建型模式這種模式是指將實例的創建和使用分離開來,隱藏類實例的創建細節,外界...
摘要:主要詳解簡單工廠模式到抽象工廠模式的演變。抽象工廠模式當一個類別的產品還有多個系列區分時,為了按系列生產商品,使用抽象工廠區分。 主要詳解簡單工廠模式到抽象工廠模式的演變。 簡單工廠模式 即靜態工廠模式1.將對象的創建和使用分開;2.將生產過程集中,便于集中管理;3.當需要創建的對象類有變動時,就不用在所有new 的地方修改了,直接修改工廠類即可; /** * 簡單工廠模式 ---...
閱讀 3190·2021-11-10 11:35
閱讀 1295·2019-08-30 13:20
閱讀 1117·2019-08-29 16:18
閱讀 2131·2019-08-26 13:54
閱讀 2155·2019-08-26 13:50
閱讀 955·2019-08-26 13:39
閱讀 2473·2019-08-26 12:08
閱讀 1951·2019-08-26 10:37