c++设计模式概述之外观
类写的不够规范,目的是缩短篇幅,请实际中不要这样做。
1、概述
了解外观模式相关概念后,一下子想到的是主板, 主板上有各种元器件,各种指示灯,各种电容,各种电路。然而,主板供电的接口就一个,其他元器件需要用电的都是从这里获取电源。比如,风扇,LED灯。要是我们单独出来,把每一个元器件单独通电,那主板上得有多少个接口啊, 主板直接通电接口就一个,省却很多麻烦。
现实中, 可能会遇到类似上面的情况,需要 一个接口调用 多个子系统的接口。
下面开始范例, 以主板为例,电扇和LED灯组为子系统, 主板上存在一个假想的开关,控制子系统的电源通断(on off 函数)。
2、元器件类,
元器件可以通断电
// 电器 具有通电和断电的功能
class equipment
{
public:
virtual void on() = 0;
virtual void off() = 0;
};
3、LED灯类
// 电灯
class ep_bulb : public equipment
{
public:
void on()
{
cout << "\n电灯打开了\n";
} void off()
{
cout << "\n 电灯关闭了 \n";
}
};
4、风扇
// 风扇
class ep_fan : public equipment
{
public:
void on()
{
cout << "\n风扇打开了\n";
} void off()
{
cout << "\n 风扇关闭了 \n";
}
};
5、主板上的一个电源控制开关
// 电源开关集合接口
class power_switch : public equipment
{
public: // 电源开关中添加下面两组电器
power_switch()
{
equipment *pinstance = nullptr; // 添加电灯
pinstance = new ep_bulb;
if (!pinstance)
cout << "电灯创建失败";
else
_plist_ep.push_back(pinstance); pinstance = nullptr;
pinstance = new ep_fan; if (!pinstance)
cout << "电扇创建失败";
else
_plist_ep.push_back(pinstance);
} virtual ~power_switch()
{
for each(auto index in _plist_ep)
{
if (index)
{
delete index;
index = nullptr;
}
}
} // -------------------------------------------------------------------------------
// 对外提供的统一接口
// ------------------------------------------------------------------------------- // 通电
void on()
{
for each(auto index in _plist_ep)
index->on();
} // 断电
void off()
{
for each(auto index in _plist_ep)
index->off();
} private:
list<equipment* > _plist_ep;
};
6、调用示例
void call_facade()
{
std::unique_ptr<equipment> ppower_switch(new(std::nothrow) power_switch);
if (!ppower_switch)
{
cout << "\n 电源开关创建失败 \n";
return;
} //
cout << "主板通电结果:";
ppower_switch->on(); cout << "\n\n\n\n主板断电结果:";
ppower_switch->off();
}
7、输出结果:

c++设计模式概述之外观的更多相关文章
- OOAD-设计模式(二)之GRASP模式与GOF设计模式概述
一.GRASP模式(通用责任分配软件模式)概述 1.1.理解责任 1)什么是责任 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为.数据.对象的创建等 知道责任——表示知道什么 行为责任 ...
- PHP设计模式概述
PHP设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
- java设计模式概述
java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模 ...
- Java设计模式学习记录-外观模式
前言 这次要介绍的是外观模式(也称为门面模式),外观模式也属于结构型模式,其实外观模式还是非常好理解的,简单的来讲就是将多个复杂的业务封装成一个方法,在调用此方法时可以不必关系具体执行了哪些业务,而只 ...
- 23种GoF设计模式概述
23种GoF设计模式概述 在前面,我们对 GoF 的 23 种设计模式进行了分类,这里先对各个设计模式的功能进行简要介绍,以便有个大概了解.后面的章节再进行详细介绍. 创建型模式 关注于怎么创建对象的 ...
- Java设计模式(一):设计模式概述、UML图、设计原则
1 设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...
- 设计模式(一)----设计模式概述及UML图解析
1.设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
- Java设计模式之《外观模式》及应用场景
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6484128.html 1.外观模式简介 外观模式,一般用在子系统与访问之间,用于对访问屏蔽复 ...
随机推荐
- 基因组共线性分析工具MCScanX
软件简介 MCScanX工具集对MCScan算法进行了调整,用于检测共线性和同线性区域,还增加了可视化和下游分析..MCscanX有三个核心工具,以及12个下游分析工具. 软件安装 进入官网http: ...
- MYSQL5.8-----5
- windows下typora图片自动上传到图床(附带腾讯云教程)
目录 1. 背景 2. 在Typora中使用 3. 安装 3.1 安装教程环境说明 3.2 安装步骤 3.3 配置图床 3.3.1 插件配置 3.3.2 腾讯云参数获取 3.3.2.1 新建子用户,获 ...
- Excel-电话号码隐藏某几个数为*,起到保护信息作用;
9.电话号码隐藏某几个数为*,起到保护信息作用: 方法一: =SUBSTITUTE(AG2,MID(AG2,4,5),"*****") 解释函数: MID(目标字符串,裁剪起始位置 ...
- .NET Core如何配置TLS Cipher(套件)?
前言 前不久我发表了一篇关于TLS协议配置被我钻了空子,经过第三方合作伙伴验证,针对此TLS协议存在不安全套件,急催速速解决,那么我们本篇开始继续整活!第三方合作伙伴对平台安全严苛要求,我们已连续发版 ...
- linux 常用查看命令
linux 常用查看命令 目录 linux 常用查看命令 linux 查看内存/进程-ps/top linux 查看磁盘存储-df linux 查看io读写-iotop linux 查看端口占用-ne ...
- 微信小程序的wx.login用async和data解决code不一致的问题
由于wx.login是异步函数,导致在我们获取微信小程序返回的code去请求我们的登录接口时code的值会异常.现在用promise封装一下,将他success的结果返回,在登陆函数中await就可以 ...
- absent, absolute
absent 1. A teacher asked in a class who killed Abraham Lincoln. A blonde said "It wasn't me, I ...
- acquire
An acquired taste is an appreciation for something unlikely to be enjoyed by a person who has not ha ...
- day11 函数
day11 函数 一.函数基础 """ 1 什么是函数 函数是盛放代码的容器:把实现某一功能的代码放到一个函数内就制造一个工具 2 为何要用函数 没有用函数之前程序的问题 ...