/// <summary>
/// 电脑类
/// </summary>
public class Computer
{
//电脑组件集合
private IList<string> parts = new List<string>();
//把单个组件添加到电脑组件集合中
public void Add(string part) {
parts.Add(part);
}
//
public void Show() {
Console.WriteLine("电脑开始在组装.....");
foreach (var part in parts)
{
Console.WriteLine("组件"+part+"已经装好");
}
Console.WriteLine("电脑组装好了");
}
}
/// <summary>
/// 抽象建造者
/// </summary>
public abstract class Builder
{
//装CPU
public abstract void BuilderPartCUP();
//装主板
public abstract void BuilderPartMainBoard();
//获得组装好的电脑
public abstract Computer GetComputer();
}
//组装人1
public class ConcreteBuilder1 : Builder
{
Computer com = new Computer();
public override void BuilderPartCUP()
{
com.Add("CPU1");
}
public override void BuilderPartMainBoard()
{
com.Add("Main Board1");
}
public override Computer GetComputer()
{
return com;
}
}
//组装人2
public class ConcreteBuilder2 : Builder
{
Computer com = new Computer();
public override void BuilderPartCUP()
{
com.Add("CPU2");
}
public override void BuilderPartMainBoard()
{
com.Add("Main Board2");
}
public override Computer GetComputer()
{
return com;
}
}
//指挥创建
public class Director {
public void Construct(Builder builder) {
builder.BuilderPartCUP();
builder.BuilderPartMainBoard();
}
}
调用:
var dir = new Director();
Builder con1 = new ConcreteBuilder1();
Builder con2 = new ConcreteBuilder2();
dir.Construct(con1);
var com1 = con1.GetComputer();
com1.Show();
dir.Construct(con2);
var com2 = con2.GetComputer();
com2.Show();
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度,
介绍完了建造者模式的具体实现之后,让我们总结下建造模式的实现要点:
1 在建造者模式中,指挥者是直接与客户端打交道的,指挥者将客户端创建产品的请求划分为对各个部件的建造请求,再将这些请求委派到具体建造者角色,具体建造者角色是完成具体产品的构建工作的,却不为客户所知道。
2 建造者模式主要用于“分步骤来构建一个复杂的对象”,其中“分步骤”是一个固定的组合过程,而复杂对象的各个部分是经常变化的(也就是说电脑的内部组件是经常变化的,这里指的的变化如硬盘的大小变了,CPU由单核变双核等)。
3 产品不需要抽象类,由于建造模式的创建出来的最终产品可能差异很大,所以不大可能提炼出一个抽象产品类。
4 在前面文章中介绍的抽象工厂模式解决了“系列产品”的需求变化,而建造者模式解决的是 “产品部分” 的需要变化。
5 由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化。
转:http://www.cnblogs.com/zhili/p/BuilderPattern.html