建造者模式 和 外观模式

这两种模式很像, 都是将一个复杂的流程统一用一个方法进行包装, 方便外界使用.

建造者模式更像是 外观模式的一种特里, 只对一个类的复杂初始化流程进行包装

建造者模式

简介: 就是一个类的构造方法可能很复杂, 由于系统的限制等原因, 可能很多初始化逻辑不能放在构造函数里, 所以就需要一个类来统一这种构建流程, 让外界不需要知道具体的复杂构造逻辑, 就能获取目标类的实例.
代码

cpp 复制代码
class Building
{
private:
	string foundation;
	string main_wall;
	string floor;
public:
	
	Building() {};
	void build_foundation() 
	{ 
		cout << "must be first step" << endl;
		foundation = "create_foundation"; 
	}
	void build_main_wall() 
	{ 
		cout << "must be second step" << endl;
		main_wall = "build main wall"; 
	}
	void build_floor() 
	{ 
		cout << "must be third step" << endl;
		floor = "build floor"; 
	}

	// 声明为友元函数, 可以访问私有变量
	friend ostream& operator << (ostream& os, const Building* b);
};



ostream& operator << (ostream& os, const Building* b)
{
	os << b->foundation << "," << b->main_wall << "," << b->floor << endl;
	return os;
}


class Builder
{
public:
	Builder() {};
	Building* build_building()
	{
		Building* b = new Building();
		b->build_foundation();
		b->build_main_wall();
		b->build_floor();
		return b;
	}
};


int main()
{
	Builder* builder = new Builder();

	Building* building= builder->build_building();

	cout << building << endl;
	return 0;
}

执行结果

外观模式

简介: 外观模式: 一般情况下, 都是因为老系统比较负责, 用一个类统一包装一下业务逻辑, 方便新系统使用

比如打车到某个地方, 分为三个部分, 然后用一个方法统一执行这些步骤, 统一打车的业务逻辑

1: 网络约车

2: 验证手机尾号

3: 驾驶员驾驶汽车到达目的地

4: 付款

代码

cpp 复制代码
class SystemCallCar
{
public:
	void run() { cout << "call car" << endl; }
};


class SystemVertifyPhone
{
public:
	void run() { cout << "vertify phone" << endl; }
};


class ReachTargetPlace
{
public:
	void run() { cout << "drive car reach target place"; }
};


class Pay
{
public:
	void run() { cout << "pay money" << endl; }
};



class Face
{
public:
	void run()
	{
		SystemCallCar* s1 = new SystemCallCar();
		SystemVertifyPhone* s2 = new SystemVertifyPhone();
		ReachTargetPlace* s3 = new ReachTargetPlace();
		Pay* s4 = new Pay();
		s1->run();
		s2->run();
		s3->run();
		s4->run();
	}
};


int main()
{
	Face f;
	f.run();
	return 0;
}

执行结果

相关推荐
会周易的程序员25 分钟前
使用 pybind11 封装 C++ 日志库 microLog 为 Python 模块
java·c++·python·物联网·架构·日志·aiot
WZF-Sang32 分钟前
网络基础——2
服务器·网络·c++·学习·网络编程·php
-西门吹雪2 小时前
现代C++ 并发编程-学习指南
java·jvm·c++
aaPIXa6224 小时前
C++ TensorRT Edge-LLM 边缘推理框架:从原理到实战
开发语言·c++·edge
nianniannnn6 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows
努力努力再努力wz6 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
Robot_Nav6 小时前
C++ 面试常问问题汇总:基础语法、面向对象、STL、多线程与设计模式
c++·设计模式·面试
一拳一个呆瓜6 小时前
【STL】iostream 编程:使用插入运算符并控制格式
c++·stl
盐焗鹌鹑蛋6 小时前
【C++】二叉搜索树
c++
哎呦,帅小伙哦6 小时前
C++工程实战: 预处理宏、宏重定义避坑、LOG_TAG业务实践与__COUNTER__深度解析
c++