类写的不够规范,目的是缩短篇幅,请实际中不要这样做。

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、输出结果:

最新文章

  1. 【代码笔记】iOS-用户发布后能保存崩溃
  2. 读深入了解c++内核对象模型小结(1/3/4)
  3. android oncreate获取宽高度
  4. IOS-App installation failed原因及解决方法
  5. iOS关于UILabel 基本属性 背景图片 背景色
  6. codeforces 425D
  7. linux 系统性能指标采样脚本
  8. Three.js基础探寻十——动画
  9. Android控件之Button(按钮控件)和ImageButton(图片按钮控件)
  10. php操作mysqli(示例代码)
  11. 解决kernel headers报错
  12. Xcode 快捷键-b
  13. 如何获得 oracle RAC 11g asm spfile S档
  14. java实现网页爬虫
  15. Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
  16. Orientation Auto Rotation旋转屏幕crash问题(Unity3D开发之十四)
  17. 【转】百度站长平台MIP引入工具使用心得
  18. .NET Core微服务之基于Ocelot+Butterfly实现分布式追踪
  19. WebLogic使用总结
  20. struts2整合uploadify插件怎样传参数

热门文章

  1. 微前端框架 single-spa 技术分析
  2. R 小知识积累
  3. 2基因组间鉴定SV
  4. python 调用系统软件
  5. 带你全面了解 OAuth2.0
  6. A Child&#39;s History of England.48
  7. R语言学习记录(一)
  8. 【leetcode】121. Best Time to Buy and Sell Stock(股票问题)
  9. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理
  10. springboot+vue脚手架使用nginx前后端分离