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

embedded/2025/1/8 1:06:33/

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.ppmy.cn/embedded/152150.html

相关文章

运动相机拍摄的视频打不开怎么办

3-10 GoPro和大疆DJI运动相机的特点&#xff0c;小巧、高清、续航长、拍摄稳定&#xff0c;很多人会在一些重要场合用来拍摄视频&#xff0c;比如可以用来拿在手里拍摄快速运动中的人等等。 但是毕竟是电子产品&#xff0c;有时候是会出点问题的&#xff0c;比如意外断电、摔重…

OkHttp接口自动化测试

文章目录 java环境搭建OkHttp之getOkHttp之POSTPOST发送From表单POST发送jsonPOST上传文件 OkHttp之deleteOkHttp之put java环境搭建 引入依赖 <!--okhttp3--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</art…

BGP(Border Gateway Protocol)路由收集器

全球 BGP&#xff08;边界网关协议&#xff09;路由收集器的分布情况以及相关数据。以下是主要的信息解读&#xff1a; 地图标记&#xff1a; 每个绿色点代表一个路由收集器的位置。路由收集器分布在全球不同的地区&#xff0c;覆盖了五大区域&#xff1a; ARIN&#xff08;美…

详细讲一下React中Redux的持久化存储(Redux-persist)

1.安装依赖&#xff1a; npm install redux-persist 2. 基础配置&#xff1a; // store.js import { configureStore } from reduxjs/toolkit import { persistStore, persistReducer } from redux-persist import storage from redux-persist/lib/storage // 默认是 localS…

密码学原理技术-第十章-Digital Signatures

文章目录 总结The principle of digital signatures核心流程Security of Signature Schemes Security servicesCore Security ServicesAdditional Security Services The RSA digital signature schemeMain idea of the schoolbook RSA signature schemeSecurity and Performan…

AdaBoost算法详解与PyTorch实现

AdaBoost算法详解与PyTorch实现 目录 AdaBoost算法详解与PyTorch实现1. AdaBoost算法概述1.1 集成学习1.2 AdaBoost的优势2. AdaBoost的核心技术2.1 样本权重调整2.2 弱分类器组合2.3 损失函数2.4 正则化技术3. PyTorch实现AdaBoost3.1 环境准备3.2 PyTorch实现AdaBoost4. 案例…

【React】漫游式引导

前言 项目中Antd版本较低&#xff0c;升级到有该组件的新版风险过于大&#xff0c;因为考虑到是老项目&#xff0c;不升级为上策&#xff08;怕出啥幺蛾子&#xff09;&#xff0c;所以抽出为一个内部组件完成需求即可&#x1f60e;~ 实践 Tour const Tour ({visible,step…

单元测试、系统测试和集成测试知识

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff…