建造者模式:在软件系统中,有时需要创建一个复杂对象,并且 这个复杂对象由其各部分子对象通过一定的步骤组合而成,即将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
记住一点:封装变化的,保留不变化的。
闲话少说,上菜:
代码部分:
static void Main(string[] args)
{
//客户找到电脑老板说要买电脑,这里要装两台电脑
//创建指挥者和构造者
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcteateBuilder2();
//老板让员工去组装第一台电脑
director.Construct(b1);
//组装完毕,组装人员搬来组装好的电脑
Computer computer1 = b1.GetComputer();
computer1.Show();
//老板让员工去组装第二台电脑
director.Construct(b2);
//组装完毕,组装人员搬来组装好的电脑
Computer computer2 = b2.GetComputer();
computer2.Show();
Console.Read();
}
}
/// <summary>
/// 指导员老板指导两人去组装电脑
/// 指挥创建过程类
/// </summary>
public class Director
{
//组装电脑
public void Construct(Builder builder)
{
builder.BuildPartCPU();
builder.BuildPartMainBoard();
}
}
/// <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 (string part in parts)
{
Console.WriteLine("组件" + part + "已装好");
}
Console.WriteLine("电脑组装好了");
}
}
/// <summary>
/// 抽象创建者,这个场景下为“组装人”,这里也可以定义为接口
/// </summary>
public abstract class Builder
{
//装CPU
public abstract void BuildPartCPU();
//装主板
public abstract void BuildPartMainBoard();
//当然还要硬盘电源等组件,这里省略
//获得组装好的电脑
public abstract Computer GetComputer();
}
public class ConcreteBuilder1 : Builder
{
Computer computer = new Computer();
public override void BuildPartCPU()
{
computer.Add("CPU1");
}
public override void BuildPartMainBoard()
{
computer.Add("Main board1");
}
public override Computer GetComputer()
{
return computer;
}
}
public class ConcteateBuilder2 : Builder
{
Computer computer = new Computer();
public override void BuildPartCPU()
{
computer.Add("CPU2");
}
public override void BuildPartMainBoard()
{
computer.Add("Main board2");
}
public override Computer GetComputer()
{
return computer;
}
}