站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Design PatternJava

【Design Pattern】4:Factory Method Pattern 工廠方法模式 (創造)

上一篇:Decorator Pattern 裝飾者模式、修飾模式 (結構)

Introduction 簡介

  1. 封裝物件 Product 的建立
  2. 設計守則:open/close,擴充開放,對修改封閉
  3. 設計守則:Dependency Inversion Principle,依賴抽象類別,不依賴具象類別
    • 話不能說的太死,盡量講一些概念性的東西
    • programming to an interface, not an implementation


工廠模式種類

  1. Simple Factory Pattern
  2. Factory Method Pattern
  3. Abstract Factory Pattern

Simple Factory Pattern 簡單工廠模式

Character 角色

  1. Factory:負責創建特定類型物件(Product)
  2. Product:創建物件的的共同特性,interface/abstract class
  3. ConcreteProudct

Definition 定義

  1. Static Factory 靜態工廠
  2. 隱藏物件建立細節
  3. 讓元件的創建,不用讓用戶端自行負責

Static Method 靜態方法

  • Simple Factory Pattern 並未強制一定要使用 static method
  • 只是經常有此種寫法,才會又名為 Static Factory
  • 使用靜態方法來簡單地隱藏物件建立細節
//SimpleFactory //public Product createProduct(String name) {} //經常加上 static public static Product createProduct(String name) {}
  • 靜態方法範例:Link

Disadvantage 缺點

  1. 系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於復雜,不利於系統的擴展和維護
  2. 如果每次新增一個 Product 子類別後,都必須修改 Factory class 中 CreateProduct() 的 判斷式的話,這樣做不符合物件導向設計的 Open-Closeed Principle(開放-封閉原則) 精神。

Example

  1. 飲料工廠

  2. 冒險者訓練營 (冒險者的工廠)

  3. 形狀工廠

Code 程式碼範例

Factory Method Pattern 工廠方法模式

Character 角色

  1. Factory:負責創建特定類型物件(Product),interface/abstract class
  2. Product:創建物件的的共同特性,interface/abstract class
  3. ConcreteFactory
  4. ConcreteProudct

Definition 定義

  1. Creational 模式
    • Factory = Creator = Operator
  2. 讓 class 把實體化的動作,交由子類別進行
  3. 將 Factory 抽象化:interface

Comparison 比較

說明
Simple Factory 工廠直接負責管理所有的產品,利用if else 或 switch case判斷式來產生產品
Factory Method 工廠提升為一個抽象概念,實際上產生產品的是實作工廠概念的實體工廠

Disadvantage 缺點

  1. 可能產生大量的工廠子類別
  2. ConcreteFactory 跟 ConcreteProduct 會成對的增加

Example

  1. 飲料工廠

  2. 冒險者訓練營 (冒險者的工廠)

  3. 點餐檯 (食物的工廠)

Code 程式碼範例

Abstract Factory Pattern 抽象工廠模式

Character 角色

  1. Factory:負責創建特定類型物件(Product),interface/abstract class
  2. Product:創建物件的的共同特性,interface/abstract class
    • 可以有兩個以上的抽象 Product
  3. ConcreteFactory
  4. ConcreteProudct

Definition 定義

  1. 增加了第二組以上Product的概念
  2. 提供一個建立一系列相關物件的介面,而無需指定它們具體的類別

Comparison 比較

說明
Factory Method 注重的是如何產生一個物件 product
Abstract Factory 注重在多個product的抽象關係,這些product之間有抽象關係

Advantage 優點

  1. 工廠方法、抽象工廠模式,都在實踐一個重要的觀念--把客戶端與實際產生的物件(產品)隔離,便於日後的擴充不互相影響 → open/close
  2. 高內聚低耦合
  3. open/close:僅限增加 Concrete Factory 和 Product

Disadvantage 缺點

  • 若增加 Abstract Product,則Abstract Factory, Concrete Factory會需要修改

Example

  1. 裝備製造工廠

    • 戰士裝備工廠
    • 弓手裝備工廠

  2. 食物工廠

    • 主食工廠
    • 湯品工廠

  3. 視窗程式中視感(Look-and-feel)元件的調換

Code 程式碼範例

總整理

Abstract Factory Pattern

Factory Method Pattern

Simple Factory Pattern

Extensive Reading 延伸閱讀

  1. 反射工廠:http://rockssdlog.blogspot.com/2012/04/design-pattern_26.html
  2. 反射工廠:http://blog.amowu.com/2009/08/factory-pattern.html

Reference 參考資料

  1. 圖片:https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)
  2. [Design Pattern] 簡單工廠模式 (Simple Factory Pattern) 不怕飲料有幾種:https://dotblogs.com.tw/joysdw12/2013/06/23/design-pattern-simple-factory-pattern
  3. 圖片:https://skyyen999.gitbooks.io/-study-design-pattern-in-java/content/simpleFactory.html
  4. 圖片:https://www.tutorialspoint.com/design_pattern/factory_pattern.htm
  5. 圖片:https://www.youtube.com/watch?v=EdIwFK0gCm4
  6. [Design Pattern] 工廠方法模式 (Factory Method Pattern) 各自的飲料工廠:https://dotblogs.com.tw/joysdw12/2013/09/12/design-pattern-factory-method-pattern
  7. 舉例淺顯易懂:http://rockssdlog.blogspot.com/2012/04/design-pattern_19.html
  8. 舉例淺顯易懂:https://skyyen999.gitbooks.io/-study-design-pattern-in-java/content/abstractFactory1.html
  9. Chapter 3 抽象工廠模式:https://rongli.gitbooks.io/design-pattern/content/chapter3.html
  10. 設計模式 - 工廠方法及抽象工廠:https://blog.techbridge.cc/2017/05/22/factory-method-and-abstract-factory/
下一篇:Singleton Pattern 單例模式、獨體模式 (創造)

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽