1. 程式人生 > >設計模式 ---建造者模式(Builder)

設計模式 ---建造者模式(Builder)

建造者模式:將一個複雜物件的構建過程和表示過程分離。使得同樣的構建過程可以建立不同的表示。

它主要是用於一些複雜的物件,這些物件的內部構建間的構造順序通常是穩定的,但物件內部的構建同時面臨著複雜的變化。建造者模式提供了一個通用的介面,介面中定義了產品建立的過程(提供產品的表示),而不同的Builder分別去實現建立過程,使得產品的表示和建立過程分離。Directory用於控制建造的過程/順序,也用它來隔離使用者和建造的過程。
這裡寫圖片描述

C#程式碼示例:

C#程式碼示例:
namespace 建造者模式
{

     public class Product
     {
         public
ArrayList Part = new ArrayList(); public void AddProduct(string PartInfo) { Part.Add(PartInfo); } public void ShowProduct() { foreach (object part in Part) { Console.WriteLine((string)part); } } } public
abstract class absBuilder { public abstract void BuildMainBoard(); public abstract void BuildMonitor(); public abstract void BuildGraphCard(); //And so on public abstract Product ReturnProduct(); } public class Lenovo :absBuilder { private
Product _product = new Product(); //建造PC的實現細節。 public override void BuildMainBoard() { _product.AddProduct("Lenovo PC MainBoard"); } public override void BuildMonitor() { _product.AddProduct("Lenovo PC Monitor"); } public override void BuildGraphCard() { _product.AddProduct("Lenovo PC GraphCard"); } public override Product ReturnProduct() { return this._product; } } public class Purchase { private absBuilder PCFactory; public Purchase (absBuilder Factory) { this.PCFactory=Factory; } public void BuildPc() { //建造PC的表示過程。 PCFactory.BuildMainBoard(); PCFactory.BuildMainBoard(); PCFactory.BuildGraphCard(); } public Product GetPc() { return (PCFactory.ReturnProduct()); } } class Class1 { /// <summary> /// 應用程式的主入口點。 /// </summary> [STAThread] static void Main(string[] args) { Purchase PcPurchase = new Purchase(new Lenovo()); PcPurchase.BuildPc(); Product MyPc = PcPurchase.GetPc(); MyPc.ShowProduct(); Console.ReadLine(); } } }

Purchase 是Director類,負責控制建造過程。absBuilder是Builder類的通用介面負責定義建造中固定存在的流程. Lenovo是一個實際的Builder它實現了absBuilder建造過程。Purchase(Director類)只用關注產品的表示,而具體的建造細節不用關心有具體的Builder類(Lenovo)去實現。體現了面向物件中,分離關注點的思想,以及依賴倒置的原則。