当前位置: 首页 > article >正文

C++二十三种设计模式之外观模式

C++二十三种设计模式之外观模式

  • 一、组成
  • 二、目的
  • 三、缺点
  • 四、示例代码

一、组成

子系统类:为外观类提供具体的功能。
外观类:封装一组子系统的接口。

二、目的

封装子系统一组接口,隐藏底层实现细节,简化子系统的使用。

三、缺点

1、违反开闭原则,子系统增加新的功能或调整现有功能,需要修改外观类来适应变化。
2、灵活性限制问题,使用者无法直接调用子系统接口,缺少对子系统的灵活控制。

四、示例代码

#include<iostream>
#include <vector>
#include <list>
#include <string>
#include <mutex>
#include <map>
#include<stack>

using namespace std;

class SubSystemA;//子系统类
class SubSystemB;//子系统类
class SubSystemC;//子系统类
class Facade;//外观类

class SubSystemA {
public:
	void Method1() {
		cout << "Subsystem A method 1 called" << endl;
	}
	void Method2() {
		cout << "Subsystem A method 2 called" << endl;
	}
	~SubSystemA() {
		cout << "~SubSystemA" << endl;
	}
};

class SubSystemB {
public:
	void Method1() {
		cout << "Subsystem B method 1 called" << endl;
	}
	void Method2() {
		cout << "Subsystem B method 2 called" << endl;
	}
	~SubSystemB() {
		cout << "~SubSystemB" << endl;
	}
};

class SubSystemC {
public:
	void Method1() {
		cout << "Subsystem C method 1 called" << endl;
	}
	void Method2() {
		cout << "Subsystem C method 2 called" << endl;
	}
	~SubSystemC() {
		cout << "~SubSystemC" << endl;
	}
};

class Facade {
public:
	Facade() {
		subSystemA = make_unique<SubSystemA>();
		subSystemB = make_unique<SubSystemB>();
		subSystemC = make_unique<SubSystemC>();
	}
	void Method1() {
		subSystemA->Method1();
		subSystemB->Method1();
		subSystemC->Method1();
	}
	void Method2() {
		subSystemA->Method2();
		subSystemB->Method2();
		subSystemC->Method2();
	}
	~Facade() {
		cout << "~Facade" << endl;
	}

private:
	unique_ptr<SubSystemA> subSystemA;
	unique_ptr<SubSystemB> subSystemB;
	unique_ptr<SubSystemC> subSystemC;
};

int main() {
	unique_ptr<Facade> facade = make_unique<Facade>();
	facade->Method1();
	facade->Method2();
}

http://www.kler.cn/a/470887.html

相关文章:

  • 【Cesium】自定义材质,添加带有方向的滚动路线
  • 【题库】人工智能训练师练习题
  • 三极管工作状态分析
  • 关于Mac中的shell
  • 物联网:七天构建一个闭环的物联网DEMO
  • asp.net core 属性路由和约定路由
  • Nginx不使用域名如何配置证书
  • 谷歌浏览器的高级开发者工具使用指南
  • Ubuntu下安装Android Sdk
  • HarmonyOS NEXT 应用开发练习:AI智能语音播报
  • 云开发 Copilot:AI 赋能的低代码革命
  • leetcode(hot100)8、9
  • java设计模式 单例模式
  • 【python】json库处理JSON数据
  • 论文复现6:
  • 微服务框架,Http异步编程中,如何保证数据的最终一致性
  • Linux高并发服务器开发 第九天(gdb调试器/基础指令 栈帧)
  • latex学习记录
  • 网络安全漏洞防护技术原理与应用
  • 【RK3588 Linux 5.x 内核编程】-Misc设备驱动
  • 【JMeter】单接口
  • 关于IDE的相关知识之二【插件推荐】
  • Freemarker模板进行判空
  • 【行空板K10】获得当前所在城市及JSON库的移植:
  • 《机器学习》——逻辑回归基本介绍
  • 122.【C语言】数据结构之快速排序(Hoare排序的优化)