1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace DesignPattern.CreationalPattern
8 {
9 #region 建造者模式要点
10
11 //定义:将复杂对象的构建过程与其表示分离,使得相同的构建过程能够创建不同的表示
12 //本质是使组装过程(指挥者类进行封装,从而达到解耦的目的)和创建具体产品解耦,不用关系复杂对象每个组件是如何组装的
13 //建造者模式主要用于“分步骤来构建一个复杂的对象”,其中“分步骤”是一个固定的组合过程,而复杂对象的各个部分是经常变的
14 //建造者模式解决的是 “产品部分” 的需要变化。
15 //建造者隐藏了具体产品的组装过程,要改变一个产品的内部表示,只需实现新的建造者就可满足产品组成组件的需求变化。
16
17 #endregion
18
19 //example of computer:
20 public abstract class BuilderPattern
21 {
22 public abstract void BuildCPU();
23 public abstract void BuildMainBoard();
24
25 public abstract Computer GetComputer();
26 }
27
28 public class BuilderApple : BuilderPattern
29 {
30 Computer _computer = new Computer();
31 public override void BuildCPU()
32 {
33 //build progress...
34
35 //computer add conponent
36 _computer.InstallConponent("apple M1");
37 }
38
39 public override void BuildMainBoard()
40 {
41 _computer.InstallConponent("apple main board");
42 }
43
44 public override Computer GetComputer()
45 {
46 return _computer;
47 }
48 }
49
50 public class BuilderMicrosoft : BuilderPattern
51 {
52 Computer _computer = new Computer();
53 public override void BuildCPU()
54 {
55 //build process...
56
57 //computer add conponent
58 _computer.InstallConponent("microsoft M1");
59 }
60
61 public override void BuildMainBoard()
62 {
63 _computer.InstallConponent("microsoft main board");
64 }
65
66 public override Computer GetComputer()
67 {
68 return _computer;
69 }
70 }
71
72 /***********************************指挥者角色**********************************************/
73 public class Director
74 {
75 public void Construct(BuilderPattern builder)
76 {
77 //封装构建策略
78 builder.BuildCPU();
79 builder.BuildMainBoard();
80 }
81 }
82 /*************************************需创建的复杂对象********************************************/
83 public class Computer
84 {
85 private List<string> _components = new List<string>();
86
87 public void InstallConponent(string conponent)
88 {
89 _components.Add(conponent);
90 }
91
92 public void ShowComputerDetail()
93 {
94 foreach (var item in _components)
95 {
96 Console.WriteLine($"computer already install {item}");
97 }
98 }
99 }
100 }