設計模式 —— 工廠模式

工廠模式:java

預備知識:
·單一職責原則:兩個類A和B,A與B的關係有兩種:1.A建立B;2.A使用B。工廠模式是爲了讓A和B的關係只能是其中一種,而不能兩種關係都有。將對象的建立和使用分離,也使得系統更加符合「單一職責原則」,有利於對功能的複用和系統的維護;ssh

·開放—封閉原則:
開放封閉原則主要體如今兩個方面:
對擴展開放,意味着有新的需求或變化時,能夠對現有代碼進行擴展,以適應新的狀況。
對修改封閉,意味着類一旦設計完成,就能夠獨立完成其工做,而不要對類進行任何修改。

·里氏替換原則:任何基類能夠出現的地方,子類必定能夠出現。spa

·建立和使用分離的好處:防止用來實例化一個類的數據和代碼在多個類中處處都是,能夠將有關建立的知識搬移到一個工廠類中;設計

優勢:
(1)解耦 :把對象的建立和使用的過程分開
(2)下降代碼重複: 若是建立某個對象的過程都很複雜,須要必定的代碼量,並且不少地方都要用到,那麼就會有不少的重複代碼。
(3)下降維護成本 :因爲建立過程都由工廠統一管理,因此發生業務邏輯變化,不須要找到全部須要建立對象B的地方去逐個修正,只須要在工廠裏修改便可,下降維護成本。對象

1.簡單工廠模式:
(1)結構:blog

  ·Abstract Product:定義產品的基本功能;
  ·Concrete Product:實現產品的基本功能;string

  ·Factory:統一工廠,實現全部產品的構造,通常根據string(類名)來建立;產品

(2)使用:it


(3)缺點:
  違背 開放-封閉 原則,新增一個產品須要改變switch
(4)改善:
  <1>.在Fatory中建立Product的方法中,使用反射代替switch(可是在建立的時候傳入「路徑+類名「比較麻煩)class

   改爲:
  <2>.反射+配置文件。java ssh中會有用到。

2.工廠方法模式:

(1)結構:

  ·Abstract Product:定義產品的基本功能;
  ·Concrete Product:實現產品的基本功能;

  ·Abstract Factory:定義工廠的基本功能(建立產品,通常只提供一種產品的建立方法);
  ·Concrete Factory:實現工廠的基本功能,不一樣工廠建立不一樣產品(一個工廠生產一種產品);

  注意:產品類遵循面向對象的多態性和里氏替換原則

(2)使用:

3.抽象工廠模式:
(1)結構:
  ·Abstract Product:定義產品的基本功能;
  ·Concrete Product:實現產品的基本功能;

    

  ·Abstract Factory:定義工廠的基本功能(建立產品,提供多種產品的建立方法);
  ·Concrete Factory:實現工廠的基本功能,不一樣工廠建立不一樣類別產品(一個工廠生產該類產品中的多種產品);

     

  注意:產品類遵循面向對象的多態性和里氏替換原則

(2)使用:

相關文章
相關標籤/搜索