工廠模式: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)使用: