設計模式之創建者模式

1.什麼是創建者模式(構建者模式)?

         創建者模式類似於一個步驟基本固定,但是每個步驟中的具體形式卻又可以變化的這類對象的創建。其中,創建者負責構建一個對象的各個部分,並且完成組裝的過程。如,做飯過程


2.意圖是什麼?

         將類的構建邏輯轉移到類的實例化外部。

3.創建者模式解讀

 1)類圖

image_2

 2)角色分析

   Product:所需要創建的對象類,由具體環境確定;

   IBuild:創建工具接口/抽象類,包括對象組裝所需的所有步驟的接口聲明;

   Build:創建工具具體實現類;Product對象作爲其成員;

   Directr:引導者,來引導對象的具體組裝過程;而具體對象的創建還是靠對象本身提供的相應方法,Builder只是調用對象的方法完成組裝步驟;

   Client:最終使用者。

4.創建者模式舉例

 1)定義產品類

class Product {
   List <string> parts = new List <string> ();
   public void Add(string part) {
     parts.Add(part);
   }
 
   public void Display() {
     Console.WriteLine("\nProduct Parts -------");
     foreach (string part in parts)
       Console.Write(part);
     Console.WriteLine();
   }
 }

 2)定義創建工具接口

interface IBuilder {
   void BuildPartA();
   void BuildPartB();
   Product GetResult();
 }
 

 3)定義創建工具具體實現類

 class Builder1 : IBuilder {
   private Product product = new Product();
   public  void BuildPartA() {
     product.Add("PartA ");
   }
 
   public void BuildPartB() {
     product.Add("PartB ");
   }
 
   public Product GetResult() {
     return product;
   }
 }
 
 class Builder2 : IBuilder {
   private Product product = new Product();
   public void BuildPartA() {
     product.Add("PartX ");
   }
 
   public void BuildPartB() {
     product.Add("PartY ");
   }
 
   public Product GetResult() {
     return product;
   }
 }

 4)定義引導者類

class Director {
   // Builder uses a complex series of steps
   public void Construct(IBuilder builder) {
     builder.BuildPartA();
     builder.BuildPartB();
     builder.BuildPartB();
   }
 }

 5)定義消費者類

public static void Main() { 
   // Create one director and two builders
   Director director = new Director();
 
   IBuilder b1 = new Builder1();
   IBuilder b2 = new Builder2();
 
   // Construct two products
   director.Construct(b1);
   Product p1 = b1.GetResult();
   p1.Display();
 
   director.Construct(b2);
   Product p2 = b2.GetResult();
   p2.Display();
   Console.ReadKey();
 }


5.使用場合
  1)構建者構建類對象的過程通常是分步驟的,這使得該模式通常被應用於解析文本以創建對象的場景。

  2)具有依賴關係或者組合關係的對象的創建尤爲適合。

  3)通常用在在構建解釋器和用戶界面上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章