详解设计模式:工厂方法模式
工廠方法模式,又稱工廠模式、多態工廠模式和虛擬構造器模式,通過工廠父類定義負責創建產品的公共接口,子類負責生產具體對象。可以理解為簡單工程模式的升級,解決簡單工廠模式的弊端。
~
本篇內容包括:關于 工廠方法模式、工廠方法模式 Demo。
文章目錄
- 一、關于 工廠方法模式
- 1、關于 工廠方法模式
- 2、關于 工廠方法模式構成
- 3、關于 工廠方法模式的實現
- 4、關于 工廠方法模式的優缺點
- 二、工廠方法模式 Demo
- 1、Demo 設計
- 2、Demo 實現
- 3、Demo 測試
一、關于 工廠方法模式
1、關于 工廠方法模式
工廠方法模式,又稱工廠模式、多態工廠模式和虛擬構造器模式,通過工廠父類定義負責創建產品的公共接口,子類負責生產具體對象。
可以理解為簡單工程模式的升級,解決簡單工廠模式的弊端。
如果在簡單工廠模式中,擴增具體產品信息,需要對原有工廠進行改造,當需求的產品類別增加到一定程度時,工廠較負責的產品線也相對復雜,當出現問題時,所有的產品的生產將會中斷。
工廠方法模式 解決簡單工廠模式的弊端,實現父類定義公共實現接口,子類負責實現創建具體的對象,這樣就可以實現增加產品類時,不需要修改工廠類,而只需要修改工廠子類。
2、關于 工廠方法模式構成
方法工廠的構成:
- 抽象的產品角色(Product):它是工廠類創建的所有對象的父類,封裝了各種產品對象的公有方法,它的引入提高了系統的靈活性,使得在工廠類中只需要定義一個通用的工廠方法,因為所有創建的具體產品都是其子類對象。
- 具體的產品角色(ConcreteProduct):簡單工廠的創建目標,所有被創建的對象都充當這個角色的某個具體類的實例。每一個具體產品角色都集成了抽象產品角色,需要在實現在抽象產品中聲明的抽象方法。
- 抽象工廠類(AbstractFactory):提供了創建產品的接口,調用者通過它訪問具體工廠的工廠方法 newProduct() 來創建產品。
- 具體工廠類(Factory):主要是實現抽象工廠中的抽象方法,完成具體產品的創建。
3、關于 工廠方法模式的實現
首先,根據具體產品進行抽象,將它們的公共的代碼進行抽象和提取后,封裝在一個抽象產品中;
其次,根據抽象產品,將各種不同對象的相關代碼封裝到不同的類中,這些類稱為具體產品類,每一個具體產品都是抽象產品的子類;
然后,提供一個抽象工廠類用于提供創建各種產品的方法,在根據具體產品,實現相應的具體工廠類,實現創建對應產品的方法;
最后,客戶端只需要調用具體工廠類的工廠方法可得到一個相應的具體產品對象。
4、關于 工廠方法模式的優缺點
優點:更符合開閉原則,增加一個產品類,則只需要實現其他具體的產品類和具體的工廠類即可;符合單一職責原則,每個工廠只負責生產對應的產品
缺點:增加一個產品,就需要實現對應的具體工廠類和具體產品類;每個產品需要有對應的具體工廠和具體產品類
二、工廠方法模式 Demo
1、Demo 設計
# 角色
DemoAbstractFactory、DemoFactoryA、DemoFactoryB、DemoAbstractProduct、DemoProductA、DemoProductB
# 實現
DemoAbstractProduct 是作為產品角色的抽象父類,DemoProductA、DemoProductB 是作為產品角色的具體實現的子類。
DemoFactory 作為抽象工廠角色,通過抽象方法 createProduct 返回對應的工廠。DemoFactoryA、DemoFactoryB 是具體工廠,分別負責返回 DemoProductA、DemoProductB 這些具體產品。
2、Demo 實現
# DemoAbstractProduct 抽象產品類
//抽象產品類 public abstract class DemoAbstractProduct {//抽象產品方法public abstract sayHi(); }# DemoProductA 具體產品類A
//繼承抽象類實現產品A類 public class DemoProductA extends DemoAbstractProduct {//實現抽象產品方法@Overidepublic abstract sayHi(){System.out.println("Hi, I'm ProductA");} }# DemoProductB 具體產品類B
//繼承抽象類實現產品B類 public class DemoProductB extends DemoAbstractProduct {//實現抽象產品方法@Overidepublic abstract sayHi(){System.out.println("Hi, I'm ProductB");} }# DemoAbstractFactory 抽象工廠類
public class DemoAbstractFactory {//抽象工廠方法public abstract Product createProduct(); }# DemoFactoryA
//具體工廠類DemoFactoryA public class DemoFactoryA extends DemoAbstractFactory {@Overidepublic Product createProduct() {System.out.println("生產了一個A");// 生產產品Areturn new DemoProductA();} }# DemoFactoryB
//具體工廠類DemoFactoryB public class DemoFactoryB extends DemoAbstractFactory {@Overidepublic Product createProduct() {System.out.println("生產了一個B");// 生產產品Breturn new DemoProductB();} }3、Demo 測試
public class Client {public static void main(String[] args) {DemoAbstractProduct product;//產品A工廠DemoAbstractFactory factoryA = new DemoFactoryA();product = factoryA.createProduct();product.sayHi();//產品B工廠DemoAbstractFactory factoryB = new DemoFactoryN();product = factoryB.createProduct();product.sayHi();} }總結
以上是生活随笔為你收集整理的详解设计模式:工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不懂就问:ZooKeeper 集群如何进
- 下一篇: 视频教程-图形图像-Adobe Phot