版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdhellfire/article/details/78682321
建造者模式:将一个复杂对象的构建过程和表示过程分离。使得同样的构建过程可以创建不同的表示。
它主要是用于一些复杂的对象,这些对象的内部构建间的构造顺序通常是稳定的,但对象内部的构建同时面临着复杂的变化。建造者模式提供了一个通用的接口,接口中定义了产品创建的过程(提供产品的表示),而不同的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)去实现。体现了面向对象中,分离关注点的思想,以及依赖倒置的原则。