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.外观模式简介 外观模式,一般用在子系统与访问之间,用于对访问屏蔽复 ...
随机推荐
- Zabbix源码安装,使用service命令管理zabbix进程
1. 前期环境: Zabbix源代码解压包:/root/zabbix-3.0.27 Zabbix安装路径:/usr/local/zabbix-3.0.27 2. 复制启动脚本到 ...
- 利用vcftools比较两个vcf文件
因为最近有一项工作是比较填充准确性的,中间有用到vcftools比较两个vcf文件. 使用命令也很简单: 1 vcftools --vcf file1.snp.vcf --diff file2.snp ...
- 到底什么是自动化优先思维?与RPA有什么关系?
基于RPA的自动化优先,正在成为广大组织的主流管理思维 到底什么是自动化优先思维?与RPA有什么关系? 如何用RPA简单快速的打造一个自动化优先的组织? 文/王吉伟 在IT运维项目中,组织经常会遇到先 ...
- 日常Java 2021/10/29
Java Object类是所有类的父类,也就是说Java的所有类都继承了Object,子类可以使用Object的所有方法. Object类位于java.lang 包中,编译时会自动导入,我们创建一个类 ...
- HTML 基本标签2
HTML标题通过<h1>-<h6>标签定义(<h1>定义最大的标题,<h6>定义最小的标题) <html>用于定义HTML文档 HTML段落 ...
- accelerate
accelerate accelerare, accumulare和accurate共享一个含义为to的词根,后半截分别是:fast, pile up, care (关心则精确). 近/反义词: ex ...
- Flink(九)【Flink的重启策略】
目录 1.Flink的重启策略 2.重启策略 2.1未开启checkpoint 2.2开启checkpoint 1)不设置重启策略 2)不重启 3)固定延迟重启(默认) 4)失败率重启 3.重启效果演 ...
- Django url中可以使用类视图.as_view()进行映射的原因
说明:在练习天天生鲜项目时,对利用类视图去与正则匹配到的url做映射有点疑惑,经过查看他人博客以及自我分析算是整明白了,所以记录一下 参考:https://www.zmrenwu.com/post/5 ...
- Oracle中常用的系统函数
本文主要来梳理下Oracle中的常用的系统函数,掌握这些函数的使用,对于我们编写SQL语句或PL/SQL代码时很有帮助,所以这也是必须掌握的知识点. 本文主要包括以下函数介绍:1.字符串函数2. 数值 ...
- 【Java 多线程】Java线程池类ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类
Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService.利用这两个类,可以创建 ...