??作者簡介:大家好,我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式,持續分享Java技術內容。
🍎個人主頁:Meteors.的博客
💞當前專欄:設計模式
?特色專欄:知識分享
🥭本文內容:23種設計模式——工廠方法模式(Factory Method Pattern)
📚 ** ps **? :閱讀文章如果有問題或者疑惑,歡迎在評論區提問或指出。
目錄
一. 背景
二.?定義
三. 結構組成
四.代碼示例
1. 工廠類的創建
2. 工廠方法模式的使用
五.?優點
六. 缺點
七. 適用場景
八. 總結
一. 背景
工廠方法模式是一種比較常見并且簡單的設計模式。相比較于簡單工廠模式?(具體類別的實現放到Factory)相比,它??將對象的創建過程委托給子類工廠,使其符合了開閉原則。如果我們之后要創建幾個有共性的對象,我們可以考慮使用工廠方法模式。
二.?定義
工廠方法模式??是一種創建型設計模式,它在父類中提供了一個創建對象的接口(或抽象方法),但允許子類決定要實例化的具體類型。簡單來說,就是將對象的實例化過程推遲到子類中進行。
??核心思想:??
- 定義一個用于創建對象的接口,讓子類決定實例化哪一個類
- 工廠方法使一個類的實例化延遲到其子類
三. 結構組成
工廠方法模式主要包含以下角色:
- Product(抽象產品) - 定義產品的接口
- ConcreteProduct(具體產品) - 實現抽象產品接口的具體產品類
- Creator(抽象工廠) - 聲明工廠方法,返回Product類型對象
- ConcreteCreator(具體工廠) - 重寫工廠方法,返回具體產品實例
四.代碼示例
1. 工廠類的創建
// 抽象產品 abstract class Product {public abstract void use(); }// 具體產品A class ConcreteProductA extends Product {@Overridepublic void use() {System.out.println("Using Product A");} }// 具體產品B class ConcreteProductB extends Product {@Overridepublic void use() {System.out.println("Using Product B");} }// 抽象工廠 abstract class Creator {// 工廠方法public abstract Product factoryMethod();// 業務方法public void someOperation() {Product product = factoryMethod();product.use();} }// 具體工廠A class ConcreteCreatorA extends Creator {@Overridepublic Product factoryMethod() {return new ConcreteProductA();} }// 具體工廠B class ConcreteCreatorB extends Creator {@Overridepublic Product factoryMethod() {return new ConcreteProductB();} }
2. 工廠方法模式的使用
// 使用具體工廠A創建產品 Creator creatorA = new ConcreteCreatorA(); creatorA.someOperation(); // 輸出: Using Product A// 使用具體工廠B創建產品 Creator creatorB = new ConcreteCreatorB(); creatorB.someOperation(); // 輸出: Using Product B
五.?優點
- 符合開閉原則 - 新增產品時無需修改現有代碼
- 符合單一職責原則 - 每個工廠類只負責創建特定產品
- 良好的封裝性 - 客戶端不需要知道具體產品的創建細節
- 良好的擴展性 - 增加新產品只需增加相應的工廠類
六. 缺點
- 類數量增加 - 每增加一個產品類就需要增加一個對應的工廠類
- 增加了系統的抽象性和復雜度
七. 適用場景
- 當一個類不知道它所需要的對象的類時
- 當一個類希望通過其子類來指定創建對象時
- 當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化時
八. 總結
工廠方法模式是面向對象設計中非常重要的創建型模式,它通過將對象的創建過程封裝起來,使得系統在不修改具體類的情況下增加新的產品對象。這種模式在實際開發中應用廣泛,特別是在需要創建多種相似產品對象的場景中。