using System; using System.Collections.Generic; namespace ConsoleApplication4 { class Program { /// <summary> /// 以组装电脑为例子 /// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样) /// 组装电脑的这个场景就可以应用建造者模式来设计 /// </summary> /// <param name="args"></param> static void Main(string[] args) { // 客户找到电脑城老板说要买电脑,这里要装两台电脑 // 创建指挥者和构造者 Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); // 老板叫员工去组装第一台电脑 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 { /// <summary> /// 电脑部件 /// </summary> private IList<string> parts = new List<string>(); /// <summary> /// 添加部件 /// </summary> /// <param name="part"></param> public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine("电脑开始在组装......."); foreach (var p in parts) { Console.WriteLine("添加"+p+"组件 "); } Console.WriteLine("电脑组装完成"); } } /// <summary> /// 抽象建造者,这个场景下为 "组装人" ,这里也可以定义为接口 /// </summary> public abstract class Builder { // 装CPU public abstract void BuildPartCPU(); // 装主板 public abstract void BuildPartMainBoard(); // 当然还有装硬盘,电源等组件,这里省略 // 获得组装好的电脑 public abstract Computer GetComputer(); } /// <summary> /// 具体创建者,具体的某个人为具体创建者,例如:装机小王啊 /// </summary> 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; } } /// <summary> /// 具体创建者,具体的某个人为具体创建者,例如:装机小李啊 /// 又装另一台电脑了 /// </summary> public class ConcreteBuilder2 : 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; } } } }
时间: 2024-08-04 02:27:26