C#设计模式(5)——建造者模式(Builder Pattern)
来源:互联网 发布:java agent 哨兵 编辑:程序博客网 时间:2024/05/17 03:17
原文出处: zhili 的博客(@天平Learning) 欢迎分享原创到伯乐头条
一、引言
在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到一个建造者类对象里,建造者只要负责返还给客户端全部组件都建造完毕的产品对象就可以了。然而现实生活中也是如此的,如果公司要采购一批电脑,此时采购员不可能自己去买各个组件并把它们组织起来,此时采购员只需要像电脑城的老板说自己要采购什么样的电脑就可以了,电脑城老板自然会把组装好的电脑送到公司。下面就以这个例子来展开建造者模式的介绍。
二、建造者模式的详细介绍
2.1 建筑者模式的具体实现
在这个例子中,电脑城的老板是直接与客户(也就是指采购员)联系的,然而电脑的组装是由老板指挥装机人员去把电脑的各个部件组装起来,真真负责创建产品(这里产品指的就是电脑)的人就是电脑城的装机人员。理清了这个逻辑过程之后,下面就具体看下如何用代码来表示这种现实生活中的逻辑过程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
/// <summary>
/// 以组装电脑为例子
/// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样)
/// 组装电脑的这个场景就可以应用建造者模式来设计
/// </summary>
namespace
设计模式之建造者模式
{
/// <summary>
/// 客户类
/// </summary>
class
Customer
{
static
void
Main(
string
[] args)
{
// 客户找到电脑城老板说要买电脑,这里要装两台电脑
// 创建指挥者和构造者
Director director =
new
Director();
Builder b1 =
new
ConcreteBuilder1();
Builder b2 =
new
ConcreteBuilder2();
// 老板叫员工去组装第一台电脑
director.Construct(b1);
// 组装完,组装人员搬来组装好的电脑
Computer computer1 = b1.GetComputer();
computer1.Show();
// 老板叫员工去组装第二台电脑
director.Construct(b2);
Computer computer2 = b2.GetComputer();
computer2.Show();
Console.Read();
}
}
/// <summary>
/// 小王和小李难道会自愿地去组装嘛,谁不想休息的,这必须有一个人叫他们去组装才会去的
/// 这个人当然就是老板了,也就是建造者模式中的指挥者
/// 指挥创建过程类
/// </summary>
public
class
Director
{
// 组装电脑
public
void
Construct(Builder builder)
{
builder.BuildPartCPU();
builder.BuildPartMainBoard();
}
}
/// <summary>
/// 电脑类
/// </summary>
public
class
Computer
{
// 电脑组件集合
private
IList<
string
> parts =
new
List<
string
>();
// 把单个组件添加到电脑组件集合中
public
void
Add(
string
part)
{
parts.Add(part);
}
public
void
Show()
{
Console.WriteLine(
"电脑开始在组装......."
);
foreach
(
string
part
in
parts)
{
Console.WriteLine(
"组件"
+part+
"已装好"
);
}
Console.WriteLine(
"电脑组装好了"
);
}
}
/// <summary>
/// 抽象建造者,这个场景下为 "组装人" ,这里也可以定义为接口
/// </summary>
public
abstract
class
Builder
{
// 装CPU
public
abstract
void
BuildPartCPU();
// 装主板
public
abstract
void
BuildPartMainBoard();
// 当然还有装硬盘,电源等组件,这里省略
// 获得组装好的电脑
public
abstract
Computer GetComputer();
}
/// <summary>
/// 具体创建者,具体的某个人为具体创建者,例如:装机小王啊
/// </summary>
public
class
ConcreteBuilder1 : Builder
{
Computer computer =
new
Computer();
public
override
void
BuildPartCPU()
{
computer.Add(
"CPU1"
);
}
public
override
void
BuildPartMainBoard()
{
computer.Add(
"Main board1"
);
}
public
override
Computer GetComputer()
{
return
computer;
}
}
/// <summary>
/// 具体创建者,具体的某个人为具体创建者,例如:装机小李啊
/// 又装另一台电脑了
/// </summary>
public
class
ConcreteBuilder2 : Builder
{
Computer computer =
new
Computer();
public
override
void
BuildPartCPU()
{
computer.Add(
"CPU2"
);
}
public
override
void
BuildPartMainBoard()
{
computer.Add(
"Main board2"
);
}
public
override
Computer GetComputer()
{
return
computer;
}
}
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式之建造者模式(Builder Pattern)
- 设计模式——建造者模式【Builder Pattern】
- java设计模式——建造者模式(Builder Pattern)
- 设计模式5:Builder Pattern(建造者模式)
- 设计模式(5)——建造者模式(Builder Pattern)
- c#设计模式---建造者模式(Builder Pattern)
- C#设计模式之建造者模式(Builder Pattern)
- 【设计模式】创建型模式——建造者模式(Builder Pattern)
- 设计模式----建造者模式(Builder Pattern)
- 设计模式---建造者模式(Builder Pattern)
- 设计模式【建造者模式Builder Pattern】
- 建造者模式——Builder Pattern
- 【二】设计模式——建造者模式(Builder Pattern)
- Setting up VB.NET to work with Excel
- 《记住回家的路》
- 《Systems Performance: Enterprise and the Cloud》读书笔记系列(八) —— 第二章(七)
- MongoDB(一)NoSQL起源
- csdn 博客 新手报到
- C#设计模式(5)——建造者模式(Builder Pattern)
- 模版:struts.xml
- HTML简介
- leetcode - Plus One
- hdu 1205 有意思的小题 2种解法 鸽巢原理
- oracle数据库的备份与恢复(expdp与impdp)
- 【记录吧】2014.10.14
- 【iOS开发-48】九宫格布局案例:自动布局、字典转模型运用、id和instancetype区别、xib重复视图运用及与nib关系
- 想用winsock编写一个简单的聊天程序,显示的全是乱码