摘要:簡單靜態(tài)工廠方法創(chuàng)建接口或抽象類具體實現(xiàn)類創(chuàng)建工廠調(diào)用輸出缺點如果要加入新的類,不僅要修改調(diào)用代碼,還要修改工廠類代碼,違反了開閉原則。
一般實現(xiàn)
創(chuàng)建實體類
public class WithOutEntityA { public WithOutEntityA(){ System.out.println("create WithOutEntityA ..."); } } public class WithOutEntityB { public WithOutEntityB(){ System.out.println("create WithOutEntityB ..."); } }
調(diào)用方法
public static void main(String[] args) { new WithOutEntityA(); new WithOutEntityB(); }
輸出
create WithOutEntityA ... create WithOutEntityB ...
問題
new操作符是創(chuàng)建對象最常用的方法,但是在一些情況下,new方法會產(chǎn)生一些問題,或者并不能滿足需求,也就是說,對象的創(chuàng)建是一個過程,而不是一個操作。
簡單/靜態(tài)工廠方法
創(chuàng)建接口或抽象類
public interface IEntity { }
具體實現(xiàn)類
public class EntityA implements IEntity { public EntityA(){ System.out.println("create EntityA ..."); } } public class EntityB implements IEntity { public EntityB(){ System.out.println("create EntityB ..."); } }
創(chuàng)建工廠
public class SimpleFactory { public IEntity create(String type){ IEntity entity = null; if(type.equals("A")){ entity = new EntityA(); }else if(type.equals("B")){ entity = new EntityB(); } return entity; } }
調(diào)用
public static void main(String[] args) { SimpleFactory simpleFactory = new SimpleFactory(); simpleFactory.create("A"); simpleFactory.create("B"); }
輸出
create EntityA ... create EntityB ...
缺點
如果要加入新的類,不僅要修改調(diào)用代碼,還要修改工廠類代碼,違反了開閉原則。
工廠方法模式
組成
1.一個抽象工廠類
2.多個具體工廠類
3.一個抽象產(chǎn)品類或產(chǎn)品接口
4.多個具體產(chǎn)品類,每個具體產(chǎn)品類,對應一個具體工廠類
具體實現(xiàn)
定義產(chǎn)品接口
public interface IEntity { }
定義具體產(chǎn)品類
public class EntityA implements IEntity { public EntityA(){ System.out.println("create EntityA ..."); } } public class EntityB implements IEntity { public EntityB(){ System.out.println("create EntityB ..."); } }
定義抽象工廠
public abstract class Factory { public abstract IEntity create(); }
定義具體工廠
public class FactoryA extends Factory{ @Override public IEntity create() { return new EntityA(); } } public class FactoryB extends Factory{ @Override public IEntity create() { return new EntityB(); } }
調(diào)用方法
public static void main(String[] args) { Factory factory = new FactoryA(); factory.create(); factory = new FactoryB(); factory.create(); }
輸出
create EntityA ... create EntityB ...
優(yōu)點
能夠輕松構建對象實例,而不必關心對象實例創(chuàng)建的發(fā)雜過程,對對象的創(chuàng)建進行了包裝,將對象的具體創(chuàng)建過程隔離起來,提高靈活度。
源碼
https://github.com/Seasons20/DisignPattern.git
END
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/69283.html
摘要:利用工廠方法模式,請求者發(fā)出請求,而不具體創(chuàng)建產(chǎn)品。正是因為這個原因,使用工廠方法模式可以簡化復雜的創(chuàng)建過程,關鍵就在于它在維持一個公共接口。 創(chuàng)建型設計模式 包括以下五種: 抽象工廠 生成器 工廠方法 原型 單例 我們選擇工廠方法和原型模式作為將用PHP實現(xiàn)的創(chuàng)建型設計的例子工廠方法模式是這5個設計模式中唯一的一種類設計模式原型模式屬于對象類模式,可以使用PHP_clone方法實...
摘要:與以往的使用的方式不同,工廠模式使用工廠實例化對象。抽象工廠模式亮相抽象工廠模式抽象工廠模式提供一個接口,用于創(chuàng)建相關或依賴對象的家族,而不需要明確指定具體類。 寫在前面 這篇博文介紹設計模式的形式將與其他篇博文不太一樣,這里我們將從一個問題入手,逐步了解到簡單工廠、工廠方法與抽象工廠模式。 PS:這篇博文涉及的內(nèi)容較多,所以篇幅有點長,請耐心閱讀。 為什么要使用工廠模式? 在 OO ...
摘要:為何重構重構有四大好處重構改進軟件設計如果沒有重構,程序的設計會逐漸腐敗變質(zhì)。經(jīng)常性的重構可以幫助維持自己該有的形態(tài)。你有一個大型函數(shù),其中對局部變量的使用使你無法采用。將這個函數(shù)放進一個單獨對象中,如此一來局部變量就成了對象內(nèi)的字段。 哪有什么天生如此,只是我們天天堅持。 -Zhiyuan 國慶抽出時間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關于書的高清下載連...
摘要:基于工廠角色和產(chǎn)品角色的多態(tài)性設計是工廠方法模式的關鍵。工廠方法模式之所以又被稱為多態(tài)工廠模式,是因為所有的具體工廠類都具有同一抽象父類。工廠方法模式總結工廠方法模式是簡單工廠模式的進一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據(jù)抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態(tài)工廠方法...
閱讀 2870·2021-09-22 15:43
閱讀 4796·2021-09-06 15:02
閱讀 859·2019-08-29 13:55
閱讀 1692·2019-08-29 12:58
閱讀 3081·2019-08-29 12:38
閱讀 1259·2019-08-26 12:20
閱讀 2275·2019-08-26 12:12
閱讀 3324·2019-08-23 18:35