文章出處
文章列表
using System; using System.Collections.Generic; using System.Linq; using System.Text; /// <summary> /// 以組裝電腦為例子 /// 每臺電腦的組成過程都是一致的,但是使用同樣的構建過程可以創建不同的表示(即可以組裝成不一樣的電腦,配置不一樣) /// 組裝電腦的這個場景就可以應用建造者模式來設計 /// </summary> namespace 設計模式之建造者模式 { /// <summary> /// 客戶類 /// </summary> class Customer { 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 { // 電腦組件集合 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(); } /// <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; } } }
文章列表
全站熱搜