1. 程式人生 > 實用技巧 >《設計模式讀書筆記》 第三章 建立型模式

《設計模式讀書筆記》 第三章 建立型模式

目錄

第三章 建立型模式

1. Abstract Factory (抽象工廠)

  • 意圖:

    • 提供一個介面以建立一系列相關或相互依賴的物件,而無需指定他們具體的類;
  • 適用性:

    • 一個系統要獨立與他的產品的建立,組合和表示;
    • 一個系統要有多個產品中的一個來配置;
    • 要強調一系列相關的產品物件的設計以便進行聯合使用;
    • 提供一個產品類庫,但只想顯示它們的介面而不是實踐;
  • 優缺點:

    • 分離了具體的類;
    • 易於交換產品系列;
    • 有利於產品的一致性;
    • 難以支援新種類的產品;
  • 相關模式:

    • 抽象工廠類常用工廠方法實現,也可以用Prototype實現;
    • 一個具體的工廠通常是一個Singleton;

2. Builder(生成器) --- 物件建立型模式

  • 意圖:
    • 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以創造不同的表示;
  • 適用性:
    • 建立複雜物件的算髮應該獨立於該物件的組成部分以及他們的裝配方式;
    • 構造過程必須允許被構造的物件有不同的表示;
  • 參與者:
    • Builder
      • 為建立一個Product物件的各個部件提供介面;
    • ConcreteBuilder
      • 實現Builder的介面一構造和裝配該產品的各個部件;
      • 定義並跟蹤它所建立的表示;
      • 提供一個檢索產品的介面;
    • Director:
      • 構造一個使用Builder介面的物件;
    • Product
      • 表示被構造的複雜物件;
      • 包含定義組成部件的類,包括將這些部件裝備配成最終產品的介面;
  • 效果:
    • 可以改變一個產品的內部表示;
    • 將構造程式碼和表示程式碼分開,通過封裝一個複雜物件的建立和表示方式提高了物件的模組性;
    • 可以對構造過程進行更精細的控制;

3. Factory Method(工廠方法) --- 物件建立型模式

  • 意圖:
    • 定義一個用於建立物件的介面,讓子類決定例項化哪一個類;
  • 別名:
    • 虛構造器(virtual constructor);
  • 適用性:
    • 當一個類不知道它所必須建立的物件的類的時候是;
    • 當一個類希望有它的子類來指定它所建立的物件的時候;
    • 當類將建立物件的責任委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一資訊區域性化的時候;
  • 參與者:
    • Product:
      • 定義工廠方法所建立的物件的介面;
    • ConcreteProduct
      • 實現Product介面;
    • Creator
      • 宣告工廠方法,該方法返回一個Product型別的物件;
      • 可以呼叫工廠方法建立一個Product物件;
    • ConcreteCreator
      • 重定義工廠方法以返回一個ConcreteProduct例項
  • 效果
    • 為子類提供鉤子(hook);
    • 連線平行的類層次;

4. Prototype(原型) --- 物件建立型模式

  • 意圖:
    • 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件;
  • 適用性:
    • 當一個系統應該獨立與他的產品建立,構成和表示時;
    • 當要例項化的類是在執行時指定的,例如動態載入;
    • 為了避免建立一個與產品類層次平行的工廠類層次;
    • 當一個類的例項只能由幾個不同狀態組合中的一種時;
  • 參與者:
    • Prototype
      • 宣告一個克隆自身的介面;
    • ConcretePrototype
      • 實現一個克隆自身的操作;
    • Client
      • 讓一個原型克隆自身從而建立一個新的物件;
  • 效果;
    • 對客戶隱藏了具體的產品類,因此減少了客戶知道的名字的數量;
    • 是客戶無需改變即可使用與特定應用相關的類;
    • 用類動態配置應用;
    • 缺點是每個Prototype的子類都必須實現Clone操作;

5. Singleton(單件)

  • 意圖:
    • 保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點;