说明:构建一个大对象时,可以分解成一个部分一个部分的构建,比如一台电脑由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. 原来sed不支持非贪婪匹配

    场景 从GISAID上面批量下载下来的序列id很长,格式如下: 太长了,并且makeblastdb的时候-parse_seqids参数会导致报错,大概是长度太长不符合要求无法处理之类的. 不作处理去掉 ...

  2. windows系统,自动设置--shutdown命令了解

    参考:https://baike.baidu.com/item/shutdown/10469108?fr=aladdin 比如你的电脑要在24:00关机,可以选择"开始运行",输入 ...

  3. VScode好用插件

    1.Anaconda Extension Pack 可以自动补全anaconda包中的属性名称 2.Code Spell Checker 单词拼写检查,非常推荐,有时候会拼错单词,这个不仅可以指出错误 ...

  4. 生成uui

    1.安装uuid包 go get github.com/google/uuid 2.目录结构 3.uuid.go package uuid import ( "github.com/goog ...

  5. 对于Python中RawString的理解(引用)

    对于Python中RawString的理解 总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2 ...

  6. 执行sql语句,查询sql版本

    SELECT VERSION();

  7. 在win10上装vmware虚拟机+ubuntu一打开就蓝屏重启怎么办?

    一般就是虚拟机和系统一些性能不兼容导致的 因为我原来装的版本是15.0的vmware,现在重新装了16的vmware

  8. MarkDown学习day1

    # Markdown学习 ## 标题: #+"空格"+标题名字 为一级为标题 ##+"空格"+标题名字 为二级标题 同理几级标题就是几个#,最多支持6级标题 # ...

  9. laravel whereHas sum & addSelect sum

    $users = User::select('id', 'username', 'coins', 'cut') ->when(request()->has('agent_tip_sum') ...

  10. Hello, YOU -- 通过简单的 hello_test.go 程序理解并学会编写测试

    Hello, YOU 书接上文上篇文章中,我们尝试编写了hello word 函数以及第一个测试 hello_test package main import "fmt" func ...