工廠方法:百度百科的定義: 工廠方法模式(FACTORYMETHOD)是一種常用的對象創建型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分為獨立類,通過依賴註入以達到解耦、復用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品 U ...
工廠方法:
百度百科的定義:
工廠方法模式(FACTORYMETHOD)是一種常用的對象創建型設計模式,此模式的核心精神是封裝類中不變的部分,
提取其中個性化善變的部分為獨立類,通過依賴註入以達到解耦、復用和方便後期維護拓展的目的。它的核心結構有四個角色,
分別是抽象工廠;具體工廠;抽象產品;具體產品
UML類圖
具體的代碼
public interface Creator { ICar createCar(); } public class BenzCreator implements Creator { @Override public ICar createCar() { return new BenzCar(); } } public class BmwCreator implements Creator { @Override public ICar createCar() { return new BmwCar(); } } public interface ICar { void run(); } public class BenzCar implements ICar { @Override public void run() { System.out.println("Benz is Running"); } } public class BmwCar implements ICar { @Override public void run() { System.out.println("BWM is Running"); } } public class Client { public static void main(String[] args) { Creator benzCreator = new BenzCreator(); benzCreator.createCar().run(); Creator bmwCreator = new BmwCreator(); bmwCreator.createCar().run(); } }
具體角色
介面 Creator 的角色為抽象工廠所有的具體工廠繼承抽象工廠
實現類 BenzCreator 和 BmwCreator為具體的工廠,用戶創建對應產品的實例
介面 ICar 的角色為產品的抽象產品,所有的具體產品繼承抽象產品
實現類 BenzCar 和 BmwCar 為具體的產品,實現具體產品的行為
具體應用場景:
引用下《設計模式:可復用面向對象軟體的基礎》
”為創建一個對象定義一個介面,但把具體創建哪個類的實例留給子類決定。工廠方法允許將一個類的初始化延遲到自己的子類“
工廠方法模式的使用場合
客戶端不知道它要創建的具體是哪一個子類。
一個類想要由自己的子類來定義某對象的創建過程。
類將創建某對象的職責代理給一些幫助子類中的一個,並且你想要將哪一個子類作為代理的信息進行局部化。
優缺點:
優點:
在工廠方法中,用戶只需要知道所要產品的具體工廠,無須關係具體的創建過程,甚至不需要具體產品類的類名。
在系統增加新的產品時,我們只需要添加一個具體產品類和對應的實現工廠,無需對原工廠進行任何修改,很好地符合了“開閉原則”。
缺點:
每次增加一個產品時,都需要增加一個具體類和對象實現工廠,是的系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。