说明:构建一个大对象时,可以分解成一个部分一个部分的构建,比如一台电脑由CUP、内存、主板、屏幕等,这些配件本身就是一个复杂的制造过程,一个一个构建后然后才组装成一台新的电脑。
步骤
1、定义要构建的对象——电脑
2、定义一个抽象的构建器,内部的每个抽象方法构建一个配件并返回构建器本身,目的是为了链式调用
3、构建器具体实现,如:三星构建器、戴尔构建器,
4、构建复杂对象是需要有顺序的,比如有些配件必须先构建,这时需要一个导演来指挥整个构建顺序
5、客户端使用构建器。创建一个导演实例和一个具体构建器实例如三星,然后把构建实例对象丢给导演去构建出电脑。
 
  1 var director = new Director();
2 var sanxingBuilder = new SanxingBuilder();
3 director.Build(sanxingBuilder);
4 var sanxingComputer = sanxingBuilder.GetComputer();
5 Console.WriteLine(sanxingComputer);
6
7 var dellBuilder = new DellBuilder();
8 director.Build(dellBuilder);
9 var dellComputer = dellBuilder.GetComputer();
10 Console.WriteLine(dellComputer);
11
12 //1、定义要构建的对象 电脑
13 public class Computer
14 {
15 public string Cup { get; set; } = string.Empty;
16 public string Memory { get; set; } = string.Empty;
17 public string Mainbord { get; set; } = string.Empty;
18 public string Screen { get; set; } = string.Empty;
19
20 public override string ToString()
21 {
22 return $"Cup:{Cup},Memory:{Memory},Mainbord:{Mainbord},Screen:{Screen}";
23 }
24 }
25
26 //2、定义一个抽象构建器
27 public abstract class Builder
28 {
29 public abstract Builder BuildCpu();//返回类型是自己(Builder),这样就支持链式调用
30 public abstract Builder BuildMemory();
31 public abstract Builder BuildMainbord();
32 public abstract Builder BuildScreen();
33
34 public abstract Computer GetComputer();
35 }
36
37 //3、实现构建起 三星
38 public class SanxingBuilder : Builder
39 {
40 private readonly Computer _computer = new Computer();
41
42 public override Builder BuildCpu()
43 {
44 _computer.Cup = "三星 CUP";
45 Console.WriteLine(_computer.Cup);
46 return this;
47 }
48
49 public override Builder BuildMainbord()
50 {
51 _computer.Mainbord = "三星 CUP";
52 Console.WriteLine(_computer.Mainbord);
53 return this;
54 }
55
56 public override Builder BuildMemory()
57 {
58 _computer.Memory = "三星 Memory";
59 Console.WriteLine(_computer.Memory);
60 return this;
61 }
62
63 public override Builder BuildScreen()
64 {
65 _computer.Screen = "三星 Screen";
66 Console.WriteLine(_computer.Screen);
67 return this;
68 }
69
70 public override Computer GetComputer()
71 {
72 return _computer;
73 }
74 }
75
76 //3实现 构建者 dell
77 public class DellBuilder : Builder
78 {
79 private readonly Computer _computer = new Computer();
80 public override Builder BuildCpu()
81 {
82 _computer.Cup = "戴尔 CUP";
83 Console.WriteLine(_computer.Cup);
84 return this;
85 }
86
87 public override Builder BuildMainbord()
88 {
89 _computer.Mainbord = "戴尔 Mainbord";
90 Console.WriteLine(_computer.Mainbord);
91 return this;
92 }
93
94 public override Builder BuildMemory()
95 {
96 _computer.Memory = "戴尔 Memory";
97 Console.WriteLine(_computer.Memory);
98 return this;
99 }
100
101 public override Builder BuildScreen()
102 {
103 _computer.Screen = "戴尔 Screen";
104 Console.WriteLine(_computer.Screen);
105 return this;
106 }
107
108 public override Computer GetComputer()
109 {
110 return _computer;
111 }
112 }
113
114 //4、导演角色、编排构建顺序
115 public class Director
116 {
117 public void Build(Builder builder)
118 {
119 builder
120 .BuildCpu()
121 .BuildMainbord()
122 .BuildMemory()
123 .BuildScreen();
124 }
125 }

设计模式之[构建者模式(Builder)]-C#的更多相关文章

  1. 设计模式之构建者模式(Builder):初步理解

    构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...

  2. 深入探索Java设计模式之构建器模式(五)

    抽丝剥茧 细说架构那些事——[优锐课] 简单的程序不需要大量的设计过程,因为它们只关注有限的解决方案,仅使用几个类.大型程序专注于广泛的设计,该设计比好的设计范例的任何其他属性都更能利用可重用性.宏伟 ...

  3. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. 构建者模式Builder创建对象

    构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...

  5. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

  6. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  7. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  8. 构建者模式(Builder pattern)

    构建者模式应用场景: 主要用来构建一些复杂对象,这里的复杂对象比如说:在建造大楼时,需要先打牢地基,搭建框架,然后自下向上地一层一层盖起来.通常,在建造这种复杂结构的物体时,很难一气呵成.我们需要首先 ...

  9. IOS设计模式浅析之建造者模式(Builder)

    定义 "将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现". 最初的定义出现于<设计模式>(Addison-Wesley,1994). 看这个概 ...

  10. 设计模式 笔记 生成器(建造者)模式 Builder

    //---------------------------15/04/08---------------------------- //builder 生成器(建造者)模式---对象创建型模式 /* ...

随机推荐

  1. 使用Sales_data 类

    添加两个Sales_data 对象 因为Sales_data 类没有提供任何操作,所以我们必须自己编码实现输入.输出和相加的功能.假设已知Sales_data 类定义于 Sales_data.h 文件 ...

  2. ant build 报 warning modified in the future

    错误原因:在测试项目时,修改了系统时间,之后保存了文件,再将系统时间改回来,会报这个错误 解决方法:复制改过的文件到记事本,然后回退下文件,再将记事本的内容覆盖下文件,重新build下就可以了.

  3. matlab解析毫米波雷达bin文件数据 得到复数

    来源:TI提供的Mmwave Radar Device ADC Raw Data Capture %%% This script is used to read the binary file pro ...

  4. ARM体系与架构【一】

    由于笔试题(摩尔线程笔试题)也出现了相关的题目,所以也顺便为此做一点点小准备. 1.ARM用什么类型的指令集 ARM架构用的是RISC精简指令集. 2.RISV与RISC指令集有什么区别 3.ARM架 ...

  5. 如何设置表格的高度 element 的table 组件

    <el-table :row-style="{ height: '30px' }" :cell-style="{ padding: 0 }" :data= ...

  6. 【confluence】jira issue宏中如何把优先级图标转义成文字

    在confluece中,关于表格处理有2个非常好的插件. Table Filter and Charts for Confluence     (插件文档:https://docs.stiltsoft ...

  7. Azure DevOps - 团队成员有权限却无法看到 Azure Repo

    ​ 我们需要进入Organization Settings, 在Users中找到相关的用户,确认用户Access Level是否为stakeholder. ​ 点击最右侧三个点,Change Acce ...

  8. SQL Injection(SQL注入)

    什么是SQL注入? SQL(结构化查询语言)注入,通常称为 SQLi,是对 Web 应用程序数据库服务器的攻击,会导致执行恶意查询.当 Web 应用程序使用未经正确验证的用户输入与数据库通信时,攻击者 ...

  9. Available parameters are [arg0, collection, list]错误的解决

    关于这个错误 每次只要是俩list集合一嵌套起来,就会报出这个错误,检查过,并不是关键字的误用: 这个才是根本原因: 当mybatis传入参数为list集合的时候:mybatis会自动把其封装为一个m ...

  10. java数据类型转换有哪几种?看这篇就够了!

    前言 在上一篇文章中,壹哥给大家讲解了Java中的数据类型,从此大家就知道了基本类型和引用类型,尤其是8种基本类型的使用和各自特点.但实际上数据类型的使用还有很多更深入的内容,比如java数据类型直接 ...