天天看點

設計模式總結之Factory Method Pattern(工廠方法模式)目錄 Simple Factory Pattern(簡單工廠模式)Factory Method Pattern(工廠方法模式)

目錄

  • 設計模式分類

建立型設計模式:

  • Singleton Pattern(單例模式)   
  • Prototype Pattern(原型模式)
  • Factory Method Pattern(工廠方法模式)   
  • Abstract Factory Pattern(抽象工廠模式)
  • Builder Pattern(建造者模式)

結構型設計模式:

  • Adapter Pattern(擴充卡模式)   
  • Bridge Pattern(橋接模式)
  • Composite Pattern(組合模式)
  • Decorator Pattern(裝飾者模式)
  • Façade Pattern(外觀模式)
  • Flyweight Pattern(享元模式)
  • Proxy Pattern(代理模式)   

行為型設計模式:

  • Chain of Responsibility Pattern(職責鍊模式)
  • Command Pattern(指令模式)
  • Interpreter Pattern(解釋器模式)   
  • Iterator Pattern(疊代器模式)
  • Mediator Pattern(中介者模式)
  • Memento Pattern(備忘錄模式)
  • Observer Pattern(觀察者模式)
  • State Pattern(狀态模式)
  • Strategy Pattern(政策模式)
  • Template Method Pattern(模闆方法模式)
  • Visitor Pattern(通路者模式)

Simple Factory Pattern(簡單工廠模式)

GoF中認為簡單工廠模式是工廠方法的一個特例。

結構

設計模式總結之Factory Method Pattern(工廠方法模式)目錄 Simple Factory Pattern(簡單工廠模式)Factory Method Pattern(工廠方法模式)

例子

設計模式總結之Factory Method Pattern(工廠方法模式)目錄 Simple Factory Pattern(簡單工廠模式)Factory Method Pattern(工廠方法模式)

優缺點

 優點:

優點:

簡單,結合單例模式更加友善和節省資源。

 缺點:

增加新的産品時,需要修改工廠類的if…else邏輯,不符合開閉原則。

Factory Method Pattern(工廠方法模式)

意圖

定義一個用于建立對象的接口,讓子類決定執行個體化哪一個類。Factory Method 使一個類的執行個體化延遲到其子類。

适用性

• 當一個類不知道它所必須建立的對象的類的時候。

• 當一個類希望由它的子類來指定它所建立的對象的時候。

• 當類将建立對象的職責委托給多個幫助子類中的某一個,并且你希望将哪一個幫助子類是代理者這一資訊局部化的時候。

結構

設計模式總結之Factory Method Pattern(工廠方法模式)目錄 Simple Factory Pattern(簡單工廠模式)Factory Method Pattern(工廠方法模式)

參與者:

• Product(抽象産品) 

— 定義工廠方法所建立的對象的接口。 

• ConcreteProduct(具體産品) 

— 實作Product接口。

• Creator(抽象工廠類) 

— 聲明工廠方法,該方法傳回一個 Product類型的對象。 Creator也可以定義一個工廠方 法的預設實作,它傳回一個預設的 ConcreteProduct對象。 

— 可以調用工廠方法以建立一個 Product對象。 

• ConcreteCreator(具體工廠類) 

— 重定義工廠方法以傳回一個 ConcreteProduct執行個體。 

例子

設計模式總結之Factory Method Pattern(工廠方法模式)目錄 Simple Factory Pattern(簡單工廠模式)Factory Method Pattern(工廠方法模式)

優缺點

 優點:

首先,良好的封裝性,代碼結構清晰。一個對象建立是有條件限制的,如一個調用者需要一個具體的産品對象,隻要知道這個産品的類名(或限制字元串)就可以了,不用知道建立對象的艱辛過程,降低子產品間的耦合。

工廠方法模式是典型的解耦架構。高層子產品隻需要知道産品的抽象類,其他的實作類都不用關心,符合迪米特法則,我不需要的就不要去交流;也符合依賴倒置原則,隻依賴産品類的抽象;當然也符合裡氏替換原則,使用産品子類替換産品父類,沒問題!

繼續閱讀