门面模式是比较常用的一种设计模式,我们可能在无意中就会使用,门面模式就是用一个门面类来处理子系统的复杂关系,门面类简单的Api接口供客户端调用。用一个简单的演播室来表示。

#include <iostream>
using namespace std;//class Camera;
//class Light;
//class Screen;
class Camera
{
public:Camera(){}~Camera(){}void TrunOn(){cout << "摄像机打开!" << endl;}void TrunOff(){cout << "摄像机关闭!" << endl;}void Rotate(int degrees){cout << "Rotate the camera by "<<degrees<< "degrees!" <<endl;}
};class Light
{
public:Light(){}~Light(){}void TrunOn(){cout << "灯光打开!" << endl;}void TrunOff(){cout << "灯光关闭!" << endl;}
};class Screen
{
public:Screen(){}~Screen(){}void TrunOn(){cout << "显示器打开!" << endl;}void TrunOff(){cout << "显示器关闭!" << endl;}
};class Facade
{
public:Facade(){m_camera = new Camera();m_lights = new Light();m_Screen = new Screen();}~Facade(){delete m_camera;delete m_lights;delete m_Screen;}void Activate(){cout<< "激活设备开始直播!"<<endl;m_camera->TrunOn();m_camera->Rotate(90);m_lights->TrunOn();m_Screen->TrunOn();}void Deactivate(){cout << "关闭设备!" << endl;m_camera->TrunOff();m_camera->Rotate(0);m_lights->TrunOff();m_Screen->TrunOff();}private:Camera *m_camera;Light *m_lights;Screen *m_Screen;
};

主函数:

int main()
{Facade * m_facade = new Facade();m_facade->Activate();std::cout <<  "直播中!" << std::endl;m_facade->Deactivate();getchar();return 0;
}

输出结果:

激活设备开始直播!
摄像机打开!
Rotate the camera by 90degrees!
灯光打开!
显示器打开!
直播中!
关闭设备!
摄像机关闭!
Rotate the camera by 0degrees!
灯光关闭!
显示器关闭!

如果不使用门面类的话,每一个客户端都要直接去调用设备,会客户端的代码很复杂。可读性差。

转载于:https://www.cnblogs.com/onlycxue/p/3429179.html

c++ 门面模式(Facade)相关推荐

  1. 外观模式 门面模式 Facade 结构型 设计模式(十三)

    外观模式(FACADE) 又称为门面模式 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统基本 ...

  2. .net 有哪些主流的设计模式_「设计模式自习室」门面模式 Facade Pattern

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  3. 【设计模式自习室】门面模式 Facade Pattern

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  4. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)...

    一,总体概要 1,笔者浅谈 说起"门面"这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, 1 functio ...

  5. 门面模式(Facade)

    门面模式说明 它能将多个不同的子系统接口封装起来,并对外提供统一的高层接口,使复杂的子系统变得更易使用 为了达到高效.便捷的目的,门店会统一对子系统进行整合与调度 外观门面类内部封装了大量的子系统资源 ...

  6. 门面模式:Facade(转自阿良.NET)

    外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式. 医院的例子 用一个例子进行说明,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号.门诊.划价.化验 ...

  7. 门面模式Facade

    完整设计模式目录见:https://blog.csdn.net/u013523089/article/details/82852049 门面模式:将一个固化的流程进行封装,使对外提供的方法更简单 将一 ...

  8. 结构型模式(五)门面模式(Facade Pattern 外观模式)

    一.模式定义 门面模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统 ...

  9. 门面模式、调停者模式、责任链模式

    简介: 1.门面模式(facade) 门面模式:比如政府部门,你需要提交一些资料证明你自己是你自己,可能会从这个部门跑到那个部门,串来串去都办不好,但是如果有一个部门来统一协调这些部门之间的关系,而你 ...

最新文章

  1. 学习java周期_Java第一作业周期总结
  2. hbuilder ios 打包失败,无法导入p12证书的解决方案
  3. create-react-app部署到GitHub Pages时报错:Failed to get remote。origin.url
  4. 手风琴特效这么飒,能用 JavaScript 实现吗?
  5. Buying Shovels CodeForces - 1360D(数论+找因子)
  6. java学习(150):文本缓冲流
  7. leetcode 21 合并两个有序链表 C++
  8. 推荐引擎内部的秘密3
  9. 贝叶斯分类与贝叶斯网络
  10. Origin下载速度慢怎么办
  11. Python爬取百度文库doc文档
  12. 解决 “error while loading shared libraries: libpng12.so.0: cannotopen shared object file: No such fil
  13. java做一个鼠标连点_用C语言写一个鼠标连点器
  14. HTML邮件模板编写规则,编写邮件HTML模板
  15. 基于Qt的Littlevgl移植(Windos10)
  16. skd怎么接入_网易七鱼怎么接入? 网易七鱼三种接入方式介绍
  17. 用词袋(bag of word)实现场景识别
  18. 躁!DJ 风格 Java 桌面音乐播放器
  19. [leetcode]Unique Paths II
  20. html怎样写出x的平方,x的平方怎么打出来

热门文章

  1. 一个大型虚拟项目包含位于不同地点的许多干系人_项目管理与人生
  2. mysql + IDEA + JDBC
  3. win7功能找不到信息服务器,win7系统找不到Internet信息服务的解决方法
  4. 实现暂停一秒输出的效果_从暂停游戏联想到的
  5. kylin 部分问题
  6. Kafka坑 - Couldn't find leaders for Set(kafka重启)
  7. onclick 调用php,AJAX调用PHP简单应用
  8. python源码提取_Python|第一个python程序(获取音乐下载地址,附源码)
  9. 10G_Ethernet_03 Example Design
  10. visual studio可以开发python吗_Visual Studio上开发Python六大功能