設計模式 ---建造者模式(Builder)
阿新 • • 發佈:2019-01-03
建造者模式:將一個複雜物件的構建過程和表示過程分離。使得同樣的構建過程可以建立不同的表示。
它主要是用於一些複雜的物件,這些物件的內部構建間的構造順序通常是穩定的,但物件內部的構建同時面臨著複雜的變化。建造者模式提供了一個通用的介面,介面中定義了產品建立的過程(提供產品的表示),而不同的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)去實現。體現了面向物件中,分離關注點的思想,以及依賴倒置的原則。