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.外观模式简介 外观模式,一般用在子系统与访问之间,用于对访问屏蔽复 ...
随机推荐
- LeeCode刷题笔记
(本来想在LeeCode题目页面上做注释的,结果没找到位置,只好来这里了) 字符串部分: 14.最长公共前缀:编写一个函数来查找字符串数组中的最长公共前缀. 示例 1: 输入: ["flow ...
- R 小知识积累
1.grep 1 ## a为一个data frame,取含有RNA-Seq的行 2 index <- grep("RNA-Seq", a$Assay_Type) 3 b &l ...
- 除了GO基因本体论,还有PO、TO、CO等各种Ontology?
目录 PO/TO CO 后记 我们最常用最熟悉的功能数据库之一:GO(gene onotology),基因本体论.其实是一套标准词汇术语,目的是从不同角度来描述某个基因的特点和功能,三大本体如生物学进 ...
- Perl 语言入门6-9
---- 第6章 哈希----------- 简介 键值对.键和值都是任意标量,但键总是会被转换成字符串. 键唯一,值可重复. 应用场景:一组数据对应到另一组数据时. 如找出重复/唯一/交叉引用/查表 ...
- R语言与医学统计图形-【16】ggplot2几何对象之标签与文本
ggplot2绘图系统--添加标签与文本.数学表达式.条形图文本.注释 1. 文本与标签添加 geom_label的文本将以标签形式出现,即文本会带有一个背景色. geom_text则是纯文本形式展示 ...
- javaSE高级篇5 — java8新特性详解———更新完毕
java8新特性 在前面已经见过一些东西了,但是:挖得有坑儿 1.lambda表达式 lambda表达式是jdk1.8引入的全新语法特性 它支持的是:只有单个抽象方法的函数式接口.什么意思? 就是说: ...
- day27 网络编程
1.OSI七层协议 1.七层划分为:应用层,表示层.会话层.传输层.网络层.数据链路层.物理层 2.五层划分:应用层.传输层.网络层.数据链路层.物理层 应用层: 表示层: 会话层: 传输层:四层交换 ...
- set、multiset深度探索
set/multiset的底层是rb_tree,因此它有自动排序特性.set中的元素不允许重复必须独一无二,key与value值相同,multiset中的元素允许重复. set的模板参数key即为关键 ...
- How exactly does Google AdWords work?
The key to how Google AdWords works is the Quality Score. Quality Score is generally how well an ad ...
- 【Linux】【Basis】【网络】网络相关的内核参数
Linux系统内核设置优化tcp网络,# vi /etc/sysctl.conf,添加以下内容 net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies.当出现SYN等待 ...