创建者模式:流程固定,细节可以自由来定
组装电脑的固定部件有以下几类,这固定的几大类(可以看作是流程固定的),但是里面的细节呢?CPU你可以用INTEL或AMD。就是说细节可变。
CPU:
硬盘:
主板:
显示器:
机箱:
鼠标键盘:
创建者模式就是要表达这个意思,解决这种问题。
这里面我们先来梳理一下装机的流程
1、选择零件(public class 零件)
2、标准化技术流程(public interface 流程)(先做什么,后做什么,你要学习相关技术。步骤是什么等)
3、生产出产品(public class 组装 : 流程)(这里我可以选择在标准内做点什么,比如我帮CPU的工作参数调整,机箱贴点纸。等)
4、出库(public class 指导者)
(用属性来做)代码呢?如何实现
class Program { /// <summary> /// 如何使用这些东西呢 /// </summary> /// <param name="args"></param> static void Main(string[] args) { 零件 l = new 零件(); l.CPU = "Intel"; l.磁盘 = "希捷"; l.机箱 = "大水牛"; l.内存 = "金士顿"; l.鼠标键盘 = "逻辑"; l.显示器 = "三星"; l.主板 = "华硕"; 组装 z = new 组装(l); 指导者 d = new 指导者(); d.Build(z); } } /// <summary> /// 用属性来做 /// </summary> public class 零件 { public string CPU { get; set; } public string 主板 { get; set; } public string 显示器 { get; set; } public string 机箱 { get; set; } public string 磁盘 { get; set; } public string 内存 { get; set; } public string 鼠标键盘 { get; set; } } public class 组装 : 流程 { 零件 t零件; public 组装(零件 _零件) { t零件 = _零件; } public void 第一步() { Console.WriteLine("第一步-----------------------------------------------"); Console.WriteLine(t零件.机箱); Console.WriteLine(t零件.鼠标键盘); Console.WriteLine(t零件.显示器); } public void 第二步() { Console.WriteLine("第二步-----------------------------------------------"); Console.WriteLine(t零件.主板); } public void 第三步() { Console.WriteLine("第三步-----------------------------------------------"); Console.WriteLine(t零件.CPU); Console.WriteLine(t零件.内存); Console.WriteLine(t零件.磁盘); } } /// <summary> /// 指导者 /// </summary> public class 指导者 { public void Build(流程 builder) { builder.第一步(); builder.第二步(); builder.第三步(); } } /// <summary> /// 制定 需要 的步骤 /// </summary> public interface 流程 { void 第一步(); void 第二步(); void 第三步(); }
(用方法来做)代码呢?如何实现(用方法来做的目的是比属性更灵活,因为我可以重写方法(override))
class Program { /// <summary> /// 如何使用这些东西呢 /// </summary> /// <param name="args"></param> static void Main(string[] args) { 组装1 z = new 组装1(); 指导者 d = new 指导者(); d.Build(z); } } /// <summary> /// 指导者 /// </summary> public class 指导者 { public void Build(流程 builder) { builder.第一步(); builder.第二步(); builder.第三步(); } } /// <summary> /// 制定 需要 的步骤 /// </summary> public interface 流程 { void 第一步(); void 第二步(); void 第三步(); } /// <summary> /// 装机 工作 /// </summary> public abstract class 零件1 { abstract public void CPU3(); abstract public void 主板2(); abstract public void 显示器6(); abstract public void 机箱1(); abstract public void 磁盘5(); abstract public void 内存4(); abstract public void 鼠标键盘7(); } /// <summary> /// 机器 工作流程 /// </summary> public class 组装1 : 零件1, 流程 { public 组装1() { } public void 第一步() { Console.WriteLine("第一步-----------------------------------------------"); ///我可以在这里自定我需要的东西 机箱1(); 显示器6(); 显示器6(); } public void 第二步() { Console.WriteLine("第二步-----------------------------------------------"); 主板2(); } public void 第三步() { Console.WriteLine("第三步-----------------------------------------------"); CPU3(); 内存4(); 磁盘5(); } public override void CPU3() { Console.WriteLine("CPU"); } public override void 主板2() { Console.WriteLine("主板2"); } public override void 显示器6() { Console.WriteLine("显示器6"); } public override void 机箱1() { Console.WriteLine("机箱1"); } public override void 磁盘5() { Console.WriteLine("磁盘5"); } public override void 内存4() { Console.WriteLine("内存4"); } public override void 鼠标键盘7() { Console.WriteLine("鼠标键盘7"); } }