设计模式之[构建者模式(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 生成器(建造者)模式---对象创建型模式 /* ...
随机推荐
- 原来sed不支持非贪婪匹配
场景 从GISAID上面批量下载下来的序列id很长,格式如下: 太长了,并且makeblastdb的时候-parse_seqids参数会导致报错,大概是长度太长不符合要求无法处理之类的. 不作处理去掉 ...
- windows系统,自动设置--shutdown命令了解
参考:https://baike.baidu.com/item/shutdown/10469108?fr=aladdin 比如你的电脑要在24:00关机,可以选择"开始运行",输入 ...
- VScode好用插件
1.Anaconda Extension Pack 可以自动补全anaconda包中的属性名称 2.Code Spell Checker 单词拼写检查,非常推荐,有时候会拼错单词,这个不仅可以指出错误 ...
- 生成uui
1.安装uuid包 go get github.com/google/uuid 2.目录结构 3.uuid.go package uuid import ( "github.com/goog ...
- 对于Python中RawString的理解(引用)
对于Python中RawString的理解 总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2 ...
- 执行sql语句,查询sql版本
SELECT VERSION();
- 在win10上装vmware虚拟机+ubuntu一打开就蓝屏重启怎么办?
一般就是虚拟机和系统一些性能不兼容导致的 因为我原来装的版本是15.0的vmware,现在重新装了16的vmware
- MarkDown学习day1
# Markdown学习 ## 标题: #+"空格"+标题名字 为一级为标题 ##+"空格"+标题名字 为二级标题 同理几级标题就是几个#,最多支持6级标题 # ...
- laravel whereHas sum & addSelect sum
$users = User::select('id', 'username', 'coins', 'cut') ->when(request()->has('agent_tip_sum') ...
- Hello, YOU -- 通过简单的 hello_test.go 程序理解并学会编写测试
Hello, YOU 书接上文上篇文章中,我们尝试编写了hello word 函数以及第一个测试 hello_test package main import "fmt" func ...