JAVA設計模式之 簡單工廠模式【Simple Factory Pattern】
一、概述
定義一個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(Static Factory Method)模式,它屬於類建立型模式。
當我們需要建立各種不同物件,這些類稱為具體產品類(ConcreteProduct),而將它們公共的程式碼進行抽象和提取後封裝在一個抽象產品類或產品介面(Product)中,每一個具體產品類都是抽象產品類的子類;然後提供一個工廠類(Factory)用於建立各種產品,在工廠類中提供一個建立產品的工廠方法,該方法可以根據所傳入的引數不同建立不同的具體產品物件;客戶端只需呼叫工廠類的工廠方法並傳入相應的引數即可得到一個產品物件。而無須直接使用new關鍵字來建立物件,也就是物件的建立由工廠來幫你完成、你不需要知道他的建立過程;
二、適用場景
(1) 工廠類負責建立的物件比較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。
(2) 客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。
三、UML類圖分析
四、參與者
1、Factory (工廠角色):
工廠角色即工廠類,它是簡單工廠模式的核心,負責實現建立所有產品例項的內部邏輯;工廠類可以被外界直接呼叫,建立所需的產品物件;
2、Product (抽象產品類或介面):
它是工廠類所建立的所有物件的父類,所建立的具體產品物件都是其子類物件;
3、ConcreteProduct (具體產品角色):
它是簡單工廠模式的建立目標;
五、用例學習
(1)產品介面類:Product.java
/**
* 產品介面
* @author lvzb.software@qq.com
*
*/
public interface Product {
}
(2) 具體的產品類A:ConcreteProductA.java
/**
* 具體的產品A
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductA implements Product {
}
(3) 具體的產品類B:ConcreteProductB.java
/**
* 具體的產品B
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductB implements Product {
}
(4)具體的產品類C:ConcreteProductC.java
/**
* 具體的產品C
* @author lvzb.software@qq.com
*
*/
public class ConcreteProductC implements Product {
}
(5)生產產品的工廠類 (簡單的工廠類/靜態工廠類):ProductFactory.java
/**
* 生產產品的工廠類 (簡單的工廠類/靜態工廠類)
* @author lvzb.software@qq.com
*
*/
public class ProductFactory {
/**
* 靜態工廠方法<br>
* 根據傳進來的引數的產品型別來 生產/建立 真實的產品實體物件
* @param productType 產品型別
* @return 產品實體物件
*/
public static Product createProduct(String productType){
Product product = null;
if ("A".equals(productType)) {
product = new ConcreteProductA();
System.out.println("工廠 建立了產品物件:ConcreteProductA");
} else if ("B".equals(productType)) {
product = new ConcreteProductB();
System.out.println("工廠 建立了產品物件:ConcreteProductB");
} else if ("C".equals(productType)) {
product = new ConcreteProductC();
System.out.println("工廠 建立了產品物件:ConcreteProductC");
} else {
System.out.println("沒有該型別的產品,生產產品哪家強 ? 工廠方法模式 : 抽象工廠模式");
}
return product;
}
}
(6)客戶端呼叫工廠類靜態方法建立產品:Client.java
public class Client {
public static void main(String[] args) {
ProductFactory.createProduct("A");
ProductFactory.createProduct("C");
ProductFactory.createProduct("B");
ProductFactory.createProduct("D");
}
}
(7)執行效果如下:六、其他/擴充套件/優缺點
簡單工廠類負責了所有產品的建立邏輯,當我們需要新引進一個新產品時,就不得不修改工廠類的產品建立邏輯,在產品型別較多時有可能會造成工廠類的產品建立邏輯過於負責,不利於系統的維護性和擴充套件性;
相關文章
- 簡單工廠模式( Simple Factory Pattern )模式
- PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)PHP設計模式
- 使用C# (.NET Core) 實現簡單工廠(Simple Factory) 和工廠方法設計模式 (Factory Method Pattern)C#設計模式
- 設計模式系列之工廠模式三兄弟(Factory Pattern)設計模式
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 - 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 – 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 簡單工廠模式(simple factory)及程式碼實現模式
- 【圖解設計模式系列】The Abstract Factory Pattern: 抽象工廠模式圖解設計模式抽象
- Java常用設計模式之簡單工廠模式Java設計模式
- java設計模式-簡單工廠模式Java設計模式
- 設計模式之簡單工廠模式設計模式
- golang設計模式之簡單工廠模式Golang設計模式
- 掌握設計模式之簡單工廠模式設計模式
- 《設計模式》 - 2. 工廠模式( Factory )設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 設計模式 - 簡單工廠模式設計模式
- 【設計模式】簡單工廠模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- 工廠模式之簡單工廠模式模式
- Java設計模式之工廠模式Java設計模式
- 設計模式(一)—— 簡單工廠模式設計模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式----簡單工廠設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- Java設計模式之工廠方法模式Java設計模式
- Java設計模式之(二)——工廠模式Java設計模式
- 5分鐘學設計模式之《簡單工廠模式》設計模式
- 設計模式入門-簡單工廠模式設計模式
- 【Java】簡單工廠模式、工廠模式、介面卡模式Java模式
- Java設計模式學習筆記(二) 簡單工廠模式Java設計模式筆記
- Java常用設計模式之工廠方法模式Java設計模式
- Java常用設計模式之抽象工廠模式Java設計模式抽象
- 3.java設計模式之工廠模式Java設計模式
- 23種設計模式(一)---簡單工廠設計模式設計模式
- 設計模式系列之一:簡單工廠模式設計模式