1. 程式人生 > >設計模式讀書筆記(二)--創建型模式

設計模式讀書筆記(二)--創建型模式

代碼 技術 bst 簡單 應用 接口 擴展 工廠類 prototype

1、創建型模式抽象了實例化過程。他們幫助一個系統獨立於如何創建、組合和表示它的那些對象、一個類創建型模式使用繼承改變被實例化的類,而一個對象創建型模式將實例化委托給另一個對象。 2、回顧一下創建型模式主要包括以下幾種:  (1)Abstract Factory:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。  (2)Builder:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。  (3)Prototype:用原型實例指定創建對象的種類,並且通過拷貝這個原型來創建新的對象。  (4)Singleton:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 3、Abstract Factory(抽象工廠)--對象創建型模式  (1)意圖:提供一個創建一些列相關或相互依賴對象的接口,而無需指定它們具體的類。  (2)適用性:
  • 一個系統要獨立於它的產品的創建、組合和表示時。
  • 一個系統要由多個產品系列中的一個來配置時。
  • 當你要強調一系列相關的產品對象的設計以便進行聯合使用時。
  • 當你提供一個產品類庫,而想顯示它們的接口而不是實現時。

 (3)結構圖:

技術分享圖片

(4)參與者:

  • AbstractFactory:聲明一個創建抽象產品對象的操作接口。
  • ConcreteFactory:實現具體產品對象的操作。
  • AbstractProduct:為一類產品對象聲明一個接口。
  • ConcreteProduct:定義一個將被相應的具體工廠創建的產品對象;實現AbstractProduct接口。
  • Client:僅使用由AbstractFactory和AbstractProduct類聲明的接口。

(5)優缺點:

  • 分離了具體的類:AbstractFactory模式幫助你控制一個應用創建的對象的類。因為一個工廠封裝創建產品對象的責任和過程,它將客戶與類的實現分離。客戶通過它們的抽象接口操縱實例。產品的類名也在具體工廠的實現中被分離;它們不出現在客戶代碼中。
  • 它使得易於交換產品系列:一個具體工廠類在一個應用中僅出現一次--即在它初始化的時候。這使得改變一個應用的具體工廠變得很容易。它只需改變具體的工廠即可使用不同的產品配置,這是因為一個抽象工廠創建了一個完整的產品系列,所以整個產品系列會立刻改變。
  • 它有利於產品的一致性:當一個系列中的產品對象被設計成一起工作時,一個應用一次只能使用同一個系列中的對象,這一點很重要。而AbstractFactory很容易實現這一點。
  • 難以支持新種類的產品:難以擴展抽象工廠以生產新種類的產品。這是因為AbstractFactory接口確定了可以被創建的產品集合。支持新種類的產品就需要擴展該工廠接口,這將涉及AbstractFactory類及其所有子類的改變。

(6)實現抽象工廠模式的一些有用的技術:

  • 將工廠作為單件:一個應用中一般每個產品系列只需一個ConcreteFactory的實例。因此工廠最好實現為一個Singleton。
  • 創建產品:AbstractFactory僅聲明一個創建產品的接口,真正創建產品是由ConcreteFactory子類實現的。最通常的一個辦法是為每一個產品定義一個工廠方法。一個具體的工廠將為每個產品重定義該工廠方法以指定產品。雖然這樣的實現很簡單,但它卻要求每個產品系列都要有一個新的具體工廠子類,即使這些產品系列的差別很小。
  • AbstractFactory通常用工廠方法實現,但它們也可以用Prototype模式實現。
  • 一個具體的工廠通常是一個單件。

設計模式讀書筆記(二)--創建型模式