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); } } }