JAVA設計模式之 抽象工廠模式【Abstract Factory Pattern】
一、概述
抽象工廠模式為建立一組物件提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是建立一種產品,它負責建立一族產品。
二、適用場景
為建立一組物件提供了一種解決方案。
三、UML類圖
四、參與者
(1) AbstractFactory(抽象工廠):它宣告瞭一組用於建立一族產品的方法,每一個方法對應一種產品。如上圖UML類圖中的Factory。
(2) ConcreteFactory(具體工廠):它實現了在抽象工廠中宣告的建立產品的方法,生成一組具體產品,這些產品構成了一個產品族,每一個產品都位於某個產品等級結構中。如上圖UML類圖中的Factory1 和Factory2。
(3) AbstractProduct(抽象產品):它為每種產品宣告介面,如上圖UML類圖中的ProductA和ProductB。
(4) ConcreteProduct(具體產品):它定義具體工廠生產的具體產品物件,實現抽象產品介面中宣告的業務方法。如上圖UML類圖中的ConcreteProductA1/A2/B1/B2。
五、用例學習
(1) 產品型別A介面: ProductA.java
/**
* 產品型別A介面
* @author lvzb.software@qq.com
*
*/
public interface ProductA {
}
(2)產品型別B介面: ProductB.java
/**
* 產品型別B介面
* @author lvzb.software@qq.com
*
*/
public interface ProductB {
}
(3) 具體的A型別產品A1: ConcreteProductA1.java
/**
* 具體的A型別產品A1
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductA1 implements ProductA {
public ConcreteProductA1(){
System.out.println("產品A1 已建立...");
}
}
(4) 具體的A型別產品A2: ConcreteProductA2.java
/**
* 具體的A型別產品A2
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductA2 implements ProductA {
public ConcreteProductA2() {
System.out.println("產品A2 已建立...");
}
}
(5) 具體的B型別產品B1: ConcreteProductB1.java
/**
* 具體的B型別產品B1
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductB1 implements ProductB {
public ConcreteProductB1(){
System.out.println("產品B1 已建立...");
}
}
(6) 具體的B型別產品B2: ConcreteProductB2.java
/**
* 具體的B型別產品B2
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductB2 implements ProductB {
public ConcreteProductB2(){
System.out.println("產品B2 已建立...");
}
}
(7) 建立產品的工廠介面: Factory.java
/**
* 建立產品族的工廠介面
* @author lvzb.software@qq.com
*
*/
public interface Factory {
public ProductA createProductA();
public ProductB createProductB();
}
(8) 具體的"工廠一"類:只負責生產A1、B1等1族甲級優產品: ProductFactory1.java
/**
* 具體的"工廠一"類:只負責生產A1、B1等1族甲級優產品
* @author lvzb.software@qq.com
*
*/
public class ProductFactory1 implements Factory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
(9) 具體的"工廠二"類:只負責生產A2、B2等2族乙級劣產品: ProductFactory2.java
/**
* 具體的"工廠二"類:只負責生產A2、B2等2族乙級劣產品
* @author lvzb.software@qq.com
*
*/
public class ProductFactory2 implements Factory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
(10) 客戶端 Client:Client.java
public class Client {
public static void main(String[] args) {
Factory factory1 = null;
System.out.println("工廠一 是正規工廠 生產的產品是正品");
factory1 = new ProductFactory1();
factory1.createProductA();
factory1.createProductB();
System.out.println("-------------");
Factory factory2 = null;
System.out.println("工廠二 是黑工廠 生產的產品是次品");
factory2 = new ProductFactory2();
factory2.createProductA();
factory2.createProductB();
}
}
(11) 執行結果 如下:
工廠一 是正規工廠 生產的產品是正品
產品A1 已建立...
產品B1 已建立...
-------------
工廠二 是黑工廠 生產的產品是次品
產品A2 已建立...
產品B2 已建立...
六、其他/擴充套件/優缺點
抽象工廠模式是工廠方法模式的進一步延伸。在抽象工廠模式中,增加新的產品族很方便,但是增加新的產品等級結構很麻煩。
相關文章
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 - 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 – 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 【圖解設計模式系列】The Abstract Factory Pattern: 抽象工廠模式圖解設計模式抽象
- Abstract Factory(抽象工廠)——物件建立型模式抽象物件模式
- 設計模式系列之工廠模式三兄弟(Factory Pattern)設計模式
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 使用C# (.NET Core) 實現抽象工廠設計模式 (Abstract Pattern)C#抽象設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- Java常用設計模式之抽象工廠模式Java設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象
- java設計模式–抽象工廠模式Java設計模式抽象
- golang設計模式之抽象工廠模式Golang設計模式抽象
- 設計模式系列之「抽象工廠模式」設計模式抽象
- 簡單工廠模式( Simple Factory Pattern )模式
- 設計模式——抽象工廠模式設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- 《設計模式》 - 2. 工廠模式( Factory )設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- Java設計模式學習筆記——工廠模式與抽象工廠模式Java設計模式筆記抽象
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式 - 抽象工廠設計模式抽象
- 設計模式----抽象工廠設計模式抽象
- 設計模式 – 抽象工廠設計模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- Java設計模式之工廠模式Java設計模式
- 23種設計模式之抽象工廠設計模式抽象
- 重學 Java 設計模式:實戰抽象工廠模式Java設計模式抽象
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式(三)抽象工廠方法模式設計模式抽象
- 23種設計模式(抽象工廠模式)設計模式抽象
- 建立型設計模式——抽象工廠模式設計模式抽象
- 使用C# (.NET Core) 實現簡單工廠(Simple Factory) 和工廠方法設計模式 (Factory Method Pattern)C#設計模式
- java 抽象工廠模式Java抽象模式
- Java設計模式之(二)——工廠模式Java設計模式