设计模式之[构建者模式(Builder)]-C#
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#的更多相关文章
- 设计模式之构建者模式(Builder):初步理解
构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...
- 深入探索Java设计模式之构建器模式(五)
抽丝剥茧 细说架构那些事——[优锐课] 简单的程序不需要大量的设计过程,因为它们只关注有限的解决方案,仅使用几个类.大型程序专注于广泛的设计,该设计比好的设计范例的任何其他属性都更能利用可重用性.宏伟 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 构建者模式Builder创建对象
构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...
- Net设计模式实例之建造者模式(Builder Pattern)
一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 构建者模式(Builder pattern)
构建者模式应用场景: 主要用来构建一些复杂对象,这里的复杂对象比如说:在建造大楼时,需要先打牢地基,搭建框架,然后自下向上地一层一层盖起来.通常,在建造这种复杂结构的物体时,很难一气呵成.我们需要首先 ...
- IOS设计模式浅析之建造者模式(Builder)
定义 "将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现". 最初的定义出现于<设计模式>(Addison-Wesley,1994). 看这个概 ...
- 设计模式 笔记 生成器(建造者)模式 Builder
//---------------------------15/04/08---------------------------- //builder 生成器(建造者)模式---对象创建型模式 /* ...
随机推荐
- NOIP2015普及组
T1 金币 很简单的题,控制天数这个变量 #include<iostream> #include<cstring> #include<cmath> #include ...
- Linux系列(8)-添加用户并设置密码
#添加用户[root@iZm5ehnt0e8indgne1hibuZ ~]# useradd -m linsiyu #设置用户密码[root@iZm5ehnt0e8indgne1hibuZ ~]# p ...
- pom.xml配置资源过滤
<build> <!--设置资源过滤--> <resources> <resource> <directory>src/main/java& ...
- 问题积累 - IAR - ErrorTa97:Cannot callintrinsic functionnounwwind _DSBfrom Thumb mode in this architecture
IAR编译工程时报错: ErrorTa97:Cannot callintrinsic functionnounwwind _DSBfrom Thumb mode in this architectur ...
- Node.js+Vue.js开发王者荣耀手机端官网
一.项目初始 1.工具安装和环境搭建 node.js.npm.mongodb 编辑器:VScode 2.项目初始化 项目分为三个部分,分别是移动端界面.后台管理界面和node.js开发的整体的服务端 ...
- PHP程序的“Missing argument 3”的错误提示解决方法
是在定义函数时为三个参数,但实际调用时只调了两个参数 解决办法: 一种:在调用函数地方补全调用的参数 二种:修改函数传入参数值,设置带有默认值, Missing argument 3 fo ...
- Net6 读取POST请求 BODY中的内容
StreamReader stream = new StreamReader(Request.Body); string body = stream.ReadToEndAsync().GetAwait ...
- centos 开启关闭网卡(禁用网卡)
说明我之前在工作中使用的服务器很多都是多网卡服务器,他可以使用不同的网卡连接不同的网段,但是,由于个别情况突发,有时候可能需要关闭某些网卡,禁止它们访问到网络,也就是需要关闭网卡.步骤1.查看有哪些网 ...
- git-bash打开自动执行某条命令的快捷方式创建
"C:\Program Files\Git\git-bash.exe" -c "npm run dev" 创建一个快捷方式,在目标里面加上以上参数,然后运行. ...
- app工程目录结构
一.APP工程目录结构 APP工程分为两个层次,第一个层次是项目(这里在eclipse中是指workspace),另一个层次是模块(这里在eclipse中是指project) 模块依附于项目,每个项目 ...