using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BuilderPattern
{
///
/// 指挥者(采购经理)
///
public class Director
{
public Computer Construct(Builder builder)
{
return builder.BuildComputer();
}
}
///
/// 建造者(模拟装机过程),也可通过接口实现
/// Director不关心具体组装的细节,所以将具体的组装细节方法标记为protected
///
public abstract class Builder
{
///
/// 组装主机
///
protected abstract void BuildMainFramePart();
///
/// 组装显示器
///
protected abstract void BuildScreenPart();
///
/// 组装输入设备(键鼠)
///
protected abstract void BuildInputPart();
///
/// 获取组装电脑
/// 由具体的组装类决定组装顺序
///
///
public abstract Computer BuildComputer();
}
///
/// 惠普电脑组装商
///
public class HpBulider : Builder
{
Computer hp = new Computer() { Band = "惠普" };
protected override void BuildMainFramePart()
{
hp.AssemblePart("主机");
}
protected override void BuildScreenPart()
{
hp.AssemblePart("显示器");
}
protected override void BuildInputPart()
{
hp.AssemblePart("键鼠");
}
///
/// 决定具体的组装步骤
///
///
public override Computer BuildComputer()
{
BuildMainFramePart();
BuildScreenPart();
BuildInputPart();
return hp;
}
}
///
/// 戴尔电脑组装商
///
public class DellBulider : Builder
{
Computer dell = new Computer() { Band = "戴尔" };
protected override void BuildMainFramePart()
{
dell.AssemblePart("主机");
}
protected override void BuildScreenPart()
{
dell.AssemblePart("显示器");
}
protected override void BuildInputPart()
{
dell.AssemblePart("键鼠");
}
public override Computer BuildComputer()
{
BuildInputPart();
BuildMainFramePart();
BuildScreenPart();
return dell;
}
}
///
/// 产品类
///
public class Computer
{
///
/// 品牌
///
public string Band { get; set; }
///
/// 电脑组件列表
///
private List assemblyParts = new List();
///
/// 组装部件
///
/// 部件名称
public void AssemblePart(string partName)
{
this.assemblyParts.Add(partName);
}
public void ShowSteps()
{
Console.WriteLine("开始组装『{0}』电脑:", Band);
foreach (var part in assemblyParts)
{
Console.WriteLine(string.Format("组装『{0}』;", part));
}
Console.WriteLine("组装『{0}』电脑完毕!", Band);
}
}
}