建造者模式 和 外观模式

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

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

建造者模式

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

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;
}

执行结果

相关推荐
handler0119 分钟前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
t***5441 小时前
如何在Dev-C++中使用Clang编译器
开发语言·c++
Qbw20041 小时前
【Linux】进程地址空间
linux·c++
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 739. 每日温度 | C++ 逆序单调栈
c++·算法·leetcode
良木生香3 小时前
【C++初阶】:STL——String从入门到应用完全指南(1)
c语言·开发语言·数据结构·c++·算法
Kurisu_红莉栖4 小时前
c++复习——const,static字
c++
czxyvX4 小时前
1-Qt概述
c++·qt
齐鲁大虾4 小时前
新人编程语言选择指南
javascript·c++·python·c#
CoderMeijun4 小时前
C++ 多线程进阶:Lambda、条件变量与死锁
c++·多线程·条件变量·lambda·死锁·生产者消费者
unicrom_深圳市由你创科技5 小时前
上位机开发常用的语言 / 框架有哪些?
c++·python·c#