松垮垮 松垮垮
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

松垮垮

c++后端开发工程师
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式

    • Adapter(适配器模式、包装模式)
    • Bridge桥接模式
    • Builder建造者模式
    • Chain
    • Command命令模式
    • Composite组合模式
    • Decorator装饰者
    • Façade门面模式(外观模式)
    • Flyweight享元模式
    • Interpreter解释器模式
    • Iterator迭代器
    • Mediator中介者模式(仲裁者模式)
    • Memento备忘录模式
    • Observer观察者模式
    • Prototype原型
    • Proxy代理模式
    • Singleton单例模式
    • State状态模式
    • Strategy战略
    • Template
    • Visitor访问者模式
    • •Abstract
    • •Factory
    • 依赖注入(控制反转IoC)
    • 概论
    • 设计模式
  • 工具和开发
  • 设计模式
songkuakua
2025-02-15

Builder建造者模式

# Builder建造者模式

Owner: -QVQ-

创建型

建造者模式可以将复杂对象的构建与它的表示分离,使得相同的构建过程可以得到不同的表示。

如果说工厂模式 (opens new window)和抽象工厂模式更注重产品整体,那建造者模式则更在乎产品的组成和细节。

优点:

  • 封装性好。有效地封装了建造过程(主要业务逻辑),使得系统整体的稳定性得到了一定保证。
  • 解耦。产品本身和建造过程解耦,相同的建造过程可以创建出不同的产品。
  • 产品建造过程精细化。该模式注重产品创建的整个过程,将复杂的步骤拆解得到多个相对简单的步骤,使得系统流程更清晰,且对细节的把控更精准。
  • 易于扩展。如果有新产品需求,只需要添加一个建造者类即可,不需要改动之前的代码,符合开闭原则。

缺点:

  • 产品的组成部分和构建过程要一致,限制了产品的多样性。
  • 若产品内部有结构上的变化,则整个系统都要进行大改,增加了后期维护成本。 Untitled

产品类:

class Computer
{
public:
	// 获取电脑信息
	void getComputer() {
		cout << "电脑产品配置为:" << endl;
		cout << " 处理器:" << getCPU() << endl;
		cout << " 显  卡:" << getGPU() << endl;
	}
	// 设置处理器
	void setCPU(string cpu){
		CPU = cpu;
	}
	// 设置显卡
	void setGPU(string gpu) {
		GPU = gpu;
	}
		// 获取处理器
	string getCPU() {
		return CPU;
	}
	// 获取显卡
	string getGPU() {
		return GPU;
	
 
private:
	string CPU;                             // 处理器
	string GPU;                             // 显卡
};
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

建造者:

class Builder
{
public:
	// 装配CPU
	virtual void addCPU() = 0;
	// 装配GPU
	virtual void addGPU() = 0;
	// 获取电脑产品
	Computer getComputer() {
		return m_computer;
	}
 
protected:
	Computer m_computer;                         // 电脑产品
};
 
// 联想-建造者
class LenovoBuilder : public Builder
{
public:
	// 装配CPU
	virtual void addCPU() {
		m_computer.setCPU("Intel 酷睿i7-8700K");
	}
	// 装配GPU
	virtual void addGPU() {
		m_computer.setGPU("RTX 4050");
	}
};
 
// 惠普-建造者
class HPBuilder : public Builder
{
public:
	// 装配CPU
	virtual void addCPU() {
		m_computer.setCPU("Intel 酷睿i5-6300HQ");
	}
	// 装配GPU
	virtual void addGPU() {
		m_computer.setGPU("GTX 1060");
	}
};
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

监督者:

class Director
{
public:
	// 构造函数
	Director(Builder* builder) {
		m_builder = builder;
	}
	// 析构函数
	~Director() {
		if (m_builder != nullptr)
			delete m_builder;
	}
	// 替换建造者
	void setBuilder(Builder *builder) {
		m_builder = builder;
	}
	// 建造
	Computer construct() {
		m_builder->addCPU();
		m_builder->addGPU();
		return m_builder->getComputer();
	}
private:
	Builder *m_builder;                     // 建造者
};
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

主函数:

int main()
{
	// 一号建造者-联想
	Builder *builder1 = new LenovoBuilder();
	cout << "联想建造者等待就业。" << endl;
	// 由监督者监督项目启动
	Director *director = new Director(builder1);
	cout << "监督者(项目经理)开始招人做项目。" << endl;
	// 联想项目完毕,获取联想电脑产品
	Computer computer1 = director->construct();
	cout << "联想项目结束。" << endl;
	computer1.getComputer();

	// 二号建造者-惠普
	Builder *builder2 = new HPBuilder();
	cout << "惠普建造者等待就业。" << endl;
	// 替换建造者
	director->setBuilder(builder2);
	cout << "监督者(项目经理)替换建造者,做新项目。" << endl;
	Computer computer2 = director->construct();
	cout << "惠普项目结束。" << endl;
	computer2.getComputer();
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

流程:创建一个监督者,传入具体的电脑制造商,监督者调用制造商的接口执行电脑制作的主流程,最后返回电脑的实值。

上次更新: 2025/02/21, 14:57:10
Bridge桥接模式
Chain

← Bridge桥接模式 Chain→

最近更新
01
搭建ai知识助手
02-23
02
边缘检测
02-15
03
css
02-15
更多文章>
Theme by Vdoing | Copyright © 2025-2025 松垮垮 | MIT License | 蜀ICP备2025120453号 | 川公网安备51011202000997号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 纯净模式