[C++]外观模式

2023-11-20

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

C++代码如下:

// 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

// 参考大话设计模式 - 外观模式

#include <iostream>

// 外观模式:对子类中的系列接口,提供各种各种组合的统一接口,用于上层调用

using namespace std;

#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
#endif

class subSystemOne {
public:
	void create() {
		cout << "sub system one create\n";
	}

	void clear() {
		cout << "sub system one clear\n";
	}
};

class subSystemTwo {
public:
	void create() {
		cout << "sub system two create\n";
	}

	void clear() {
		cout << "sub system two clear\n";
	}
};

class subSystemThree {
public:
	void create() {
		cout << "sub system three create\n";
	}

	void clear() {
		cout << "sub system three clear\n";
	}
};

class subSystemFour {
public:
	void create() {
		cout << "sub system four create\n";
	}

	void clear() {
		cout << "sub system four clear\n";
	}
};

// 具体的提供接口的类。
// 客户端只关心调用哪个组合的接口方法,而不需要关心具体的实现
class Facade {
public:
	Facade() {
		subsystemone_ = new subSystemOne();
		subsystemtwo_ = new subSystemTwo();
		subsystemthree_ = new subSystemThree();
		subsystemfour_ = new subSystemFour();
	}

	~Facade() {
		SAFE_DELETE(subsystemone_);
		SAFE_DELETE(subsystemtwo_);
		SAFE_DELETE(subsystemthree_);
		SAFE_DELETE(subsystemfour_);
	};

	void one_and_two_create() {
		subsystemone_->create();
		subsystemtwo_->create();
	}

	void three_and_four_clear() {
		subsystemthree_->clear();
		subsystemfour_->clear();
	}

private:
	subSystemOne* subsystemone_ = nullptr;
	subSystemTwo* subsystemtwo_ = nullptr;
	subSystemThree* subsystemthree_ = nullptr;
	subSystemFour* subsystemfour_ = nullptr;
};

int main()
{
	Facade* facade = new Facade();
	facade->one_and_two_create();
	facade->three_and_four_clear();

	SAFE_DELETE(facade)

	return 0;
}


github源码路径:https://github.com/dangwei-90/Design-Mode

持续更新中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C++]外观模式 的相关文章

随机推荐

  • 枚举基础问题

    枚举问题 与7无关的数为例 枚举问题 这类问题并不复杂 对于题目本身只需要通过循环去遍历 列举出所有可能满足条件的情况 一个一个罗列出来 称为枚举问题 例如下面的题目 与7无关的数 这就是一类枚举问题 将所有可能满足 与7无关的数 罗列出来
  • POC - Adobe ColdFusion 反序列化漏洞(CVE-2017-3066)

    安装010Editer 下载链接 http www pc6 com softview SoftView 55129 html 复制POC的十六进制 00 03 00 00 00 01 00 00 00 00 00 00 00 01 11 0
  • html制作简单的表单<form>

    文章目录 一 使用到的标签用法介绍 1 演示标签代码 2 标签使用具体介绍 二 表单制作代码 三 结果显示 一 使用到的标签用法介绍 1 演示标签代码
  • 输出九九乘法表

    九九乘法表 尝试编写程序 输出九九乘法表 具体如下图所示 代码 include
  • redis服务器信息统计,Redis 返回关于 Redis 服务器的各种信息和统计数值 命令:INFO...

    INFO section 以一种易于解释 parse 且易于阅读的格式 返回关于 Redis 服务器的各种信息和统计数值 通过给定可选的参数 section 可以让命令只返回某一部分的信息 server 一般 Redis 服务器信息 包含以
  • 突发!ITELLYOU要改版了!

    微信公众号 网管小贾 个人博客 www sysadm cc 经常下载Windows系统镜像的老司机中 我敢保证十之八九对 MSDN 我告诉你 这个网站再熟悉不过 可是对于新手小白们来说 这个站TA究竟是个啥 其实 MSDN 我告诉你 是个名
  • 解决火狐首次启动太慢的方法

    众所周知 火狐浏览器有一定的优越性 现在众多的网站都采用了jquery技术 而ie在加载jquery上效果实在太差 尤其是配置稍低的情况下 ie很容易被卡死 这就体现出了火狐的优势 但火狐唯一不足的就是第一次启动的速度非常的慢 下面就是解决
  • 世界芯中国芯RISC-V相关资源及进展

    目录 1 RISC V介绍 RISC V为何会在最近两年迅速崛起 RISC V处理器生态 RISC V商业模式 2 RISC V发展历程 3 RISC V国际协会 4 中国RISC V产业联盟 5 RISC V相关资源 1 指令集规范 2
  • kotlin 之于 java 的差异

    一 变量声名 赋值和访问 kotlin 变量是空安全的 一般要求声明时就赋值 声名变量有两个关键字var和val 其中val相当于 java 的中的final 变量类型可显式给出 也可隐式推断 变量也可分可空类型和非空类型 以下给出几种声名
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • Altium Designer 20 常见错误

    记录学习过程中出现的错误及解决方法 1 off grid pin问题和Off grid Net Label问题 Off grid Net Label问题解决 只需要选中出现警告的元件 然后按A再按G即可 或者按Shift Ctrl D也行
  • 【网络通信】TCP网络编程

    TCP网络编程 一 面向连接的TCP流模式 二 server程序 三 client程序 四 相关文章 1 TCP网络编程 2 sockaddr和sockaddr in详解 3 socket编程为什么需要htons ntohl ntohs h
  • huggingfacer QuestionAnswerig问答模型调用方式

    huggingface网站提供了大量深度学习预训练模型及其调用方式 本文主要介绍问答模型调用方式 主要是针对问答结果输出完整上下文的问题 其现象在于问题答案为输入的上下文 而不是答案部分 出现该问题主要原因是transformers版本过低
  • Linux流行的发行版本

    Linux是一种广泛使用的自由开源操作系统 具有高度的可定制性 可靠性和安全性 在Linux世界中 存在着许多流行的发行版本 这些版本针对不同的用户需求和技能水平提供了不同的特性和功能 下面将介绍几个流行的Linux发行版本 一 Ubunt
  • 独家解读丨2019,技术传播去向何方?

    如果您是 Technical writer 关于2019年技术传播的发展一定有独到见解 欢迎拉到文末参加有奖活动 小编说 三年一晃而过 The Content Wrangler 再度重磅发布2019技术传播基准调研报告 今天小编要带大家好好
  • 替换JSONObject某个对象的值

    有时候我们只想替换JSONObject某个对象的值 不想把所有对象的值都列出来 那就用for循环把所有的值重新赋值一遍 再单独给需要赋值的对象重新赋值 JSONObject itemObject new JSONObject sJson S
  • 已解决 Request execution error. endpoint=DefaultEndpoint{ serviceUrl=‘http://localhost:8761/eureka/}

    Requestexecutionerror endpoint DefaultEndpoint serviceUrl http localhost 8761 eureka 注册中心报错 问题原因 可能就是yml文件有一步写错了然后照成报错 报
  • 多线程中如何去保证线程安全

    http www cnblogs com qingche p 5695743 html 一 前言 前段时间看了几个开源项目 发现他们保持线程同步的方式各不相同 有 synchronized NSLock dispatch semaphore
  • 12.29练习总结

    第一题 迷宫 题目描述 给定一个N M 方格的迷宫 迷宫里有 T处障碍 障碍处不可通过 在迷宫中移动有上下左右四种方式 每次只能移动一个方格 数据保证起点上没有障碍 给定起点坐标和终点坐标 每个方格最多经过一次 问有多少种从起点坐标到终点坐
  • [C++]外观模式

    外观模式 Facade Pattern 隐藏系统的复杂性 并向客户端提供了一个客户端可以访问系统的接口 这种类型的设计模式属于结构型模式 它向现有的系统添加一个接口 来隐藏系统的复杂性 这种模式涉及到一个单一的类 该类提供了客户端请求的简化