Director 构造一个使用Builder接口的对象

时间:2021-11-27 08:08:32

Director 构造一个使用Builder接口的对象

界说:(Builder Pattern)

将一个庞大东西的构建与它的暗示疏散,使得同样的构建过程可以创建差此外暗示。

启示:

采购经理要采购一批台式电脑,为了节约公司本钱,决定组装。但是对付怎么组装,,采购经理不知道也不关心,所以就指派装机商组装。第一次采购的电脑是组装的HP的台式机,
第二次采购经理决定换个品牌,组装DELL的台式机。对付怎么组装HP、DELL台式机,采购经理不关心。

参预者:

Builder
为创建一个Product东西的各个部件指定抽象接口。
ConcreteBuilder
实现Builder的接口以结构和装配该产品的各个部件。
界说并明确它所创建的暗示。
供给一个检索产品的接口。
Director
结构一个使用Builder接口的东西。
Product
暗示被结构的庞大东西。ConcreteBuilder创建该产品的内部暗示并界说它的装配过程。
包罗界说构成部件的类,包孕将这些部件装配成最终产品的接口。

 

代码:

先看看产品Product,电脑的实现。

/// <summary> /// 产品类 /// </summary> public class Computer { /// <summary> /// 品牌 /// </summary> public string Band { get; set; } /// <summary> /// 电脑组件列表 /// </summary> private List<string> assemblyParts = new List<string>(); /// <summary> /// 组装部件 /// </summary> /// <param>部件名称</param> 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); } }

接下来看Builder角色,即电脑组装商抽象类。

/// <summary> /// 建造者(模拟装机过程),也可通过接口实现 /// Director不关心具体组装的细节,所以将具体的组装细节要领符号为protected /// </summary> public abstract class Builder { /// <summary> /// 组装主机 /// </summary> protected abstract void BuildMainFramePart(); /// <summary> /// 组装显示器 /// </summary> protected abstract void BuildScreenPart(); /// <summary> /// 组装输入设备(键鼠) /// </summary> protected abstract void BuildInputPart(); /// <summary> /// 获取组装电脑 /// 由具体的组装类决定组装挨次 /// </summary> /// <returns></returns> public abstract Computer BuildComputer(); }

再看看具体的ConcreteBuilder角色,HP电脑组装商的实现

/// <summary> /// 惠普电脑组装商 /// </summary> 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("键鼠"); } /// <summary> /// 决定具体的组装法式 /// </summary> /// <returns></returns> public override Computer BuildComputer() { BuildMainFramePart(); BuildScreenPart(); BuildInputPart(); return hp; } }

最后只等指挥者Director一声令下,组装电脑。看看指挥者的实现。