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

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //class Camera;
  5. //class Light;
  6. //class Screen;
  7. class Camera
  8. {
  9. public:
  10. Camera()
  11. {
  12.  
  13. }
  14. ~Camera()
  15. {
  16.  
  17. }
  18. void TrunOn()
  19. {
  20. cout << "摄像机打开!" << endl;
  21. }
  22. void TrunOff()
  23. {
  24. cout << "摄像机关闭!" << endl;
  25. }
  26. void Rotate(int degrees)
  27. {
  28. cout << "Rotate the camera by "<<degrees<< "degrees!" <<endl;
  29. }
  30. };
  31.  
  32. class Light
  33. {
  34. public:
  35. Light()
  36. {
  37.  
  38. }
  39. ~Light()
  40. {
  41.  
  42. }
  43. void TrunOn()
  44. {
  45. cout << "灯光打开!" << endl;
  46. }
  47. void TrunOff()
  48. {
  49. cout << "灯光关闭!" << endl;
  50. }
  51. };
  52.  
  53. class Screen
  54. {
  55. public:
  56. Screen()
  57. {
  58.  
  59. }
  60. ~Screen()
  61. {
  62.  
  63. }
  64. void TrunOn()
  65. {
  66. cout << "显示器打开!" << endl;
  67. }
  68. void TrunOff()
  69. {
  70. cout << "显示器关闭!" << endl;
  71. }
  72. };
  73.  
  74. class Facade
  75. {
  76. public:
  77. Facade()
  78. {
  79. m_camera = new Camera();
  80. m_lights = new Light();
  81. m_Screen = new Screen();
  82. }
  83. ~Facade()
  84. {
  85. delete m_camera;
  86. delete m_lights;
  87. delete m_Screen;
  88. }
  89. void Activate()
  90. {
  91. cout<< "激活设备开始直播!"<<endl;
  92. m_camera->TrunOn();
  93. m_camera->Rotate();
  94. m_lights->TrunOn();
  95. m_Screen->TrunOn();
  96.  
  97. }
  98. void Deactivate()
  99. {
  100. cout << "关闭设备!" << endl;
  101. m_camera->TrunOff();
  102. m_camera->Rotate();
  103. m_lights->TrunOff();
  104. m_Screen->TrunOff();
  105. }
  106.  
  107. private:
  108. Camera *m_camera;
  109. Light *m_lights;
  110. Screen *m_Screen;
  111. };

主函数:

  1. int main()
  2. {
  3. Facade * m_facade = new Facade();
  4. m_facade->Activate();
  5. std::cout << "直播中!" << std::endl;
  6. m_facade->Deactivate();
  7. getchar();
  8. return ;
  9. }

输出结果:

  1. 激活设备开始直播!
  2. 摄像机打开!
  3. Rotate the camera by 90degrees!
  4. 灯光打开!
  5. 显示器打开!
  6. 直播中!
  7. 关闭设备!
  8. 摄像机关闭!
  9. Rotate the camera by 0degrees!
  10. 灯光关闭!
  11. 显示器关闭!

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

c++ 门面模式(Facade)的更多相关文章

  1. 说说设计模式~门面模式(Facade)

    返回目录 门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点. 定义 门面模式,是指提供一个统一的接口去访问多个子系统的 ...

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

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

  3. Tomcat源代码-门面模式(Facade)

    从Tomcat源码提炼出设计模式-门面设计模式: 概念 外部访问内部,耦合度增加,不利于扩展.而门面模式在内部基础上进行再度封装,只提供外部想要的方法.这时访问方式由“外部---内部”变为了“外部-- ...

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

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

  5. 学习笔记——门面模式Facade

    门面模式,其实在我们不经意间已经使用了此设计模式.当我们需要将两个子系统,合并对外提供一个大的接口时,我们使用的就是门面模式.对外,子系统的接口是不可见的,只有我们的门面在.

  6. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...

  7. php门面模式(facade pattern)

    书上不全的代码,我自己补全的. <?php /* The facade pattern is used when we want to simplify the complexities of ...

  8. 门面模式(Facade)解析

    门面模式使用一个门面类来包装一些复杂的类,对外提供一个简单的访问方法. 见如下代码: class CPU { public void startup() { System.out.println(&q ...

  9. JavaScript设计模式(6)-门面模式

    门面模式 门面模式(Facade Pattern):他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计模式属于结构性模式.为子系统中的一组接口提供了一个统一的访问接口,这个接 ...

随机推荐

  1. LG3628 [APIO2010]特别行动队

    题意 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i, i + 1, . ...

  2. 【HDU】4632 Palindrome subsequence(回文子串的个数)

    思路:设dp[i][j] 为i到j内回文子串的个数.先枚举所有字符串区间.再依据容斥原理. 那么状态转移方程为   dp[i][j] = dp[i][j-1] + dp[i+1][j] - dp[i+ ...

  3. 常用DNS列表(电信、网通)

    电信 DNS 列表 -- 共 32 条 (按拼音排序) 电信 A安徽 202.102.192.68 202.102.199.68     电信 A澳门 202.175.3.8 202.175.3.3 ...

  4. 2 分支语句——《Swift3.0 从入门到出家》

    2 分支语句 当程序面临多个选择,每一个选择都会执行不同的代码块,这个时候就要使用分支语句.常见的分支语句有: if 选择语句:if... if…else if…elseif…else if是现实生活 ...

  5. #51单片机#8位数码管(74HC595芯片)的使用方法

    数码管基本属性:1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示:2.宽工作电压3.3V到5V:3.PCB板尺寸:71mm*22mm4.数码管型号:0.36 4位共阳 ...

  6. Cocoa Pod使用总结

    1. 背景 CocoaPod是Swift,Objective-C语言编写的Cocoa项目的依赖管理工具.简单点说就是它管理了很多的Swift和Objective-C的库,然后通过CocoaPod可以比 ...

  7. GitFlow在命令行的使用

    gitflow安装 在命令行直接使用yum安装 yum install gitflow 如果本地的yum源中不存在gitflow,可以尝试添加EPEL源 CentOS6.5: # 下载 wget ht ...

  8. mysql索引之八:myisam压缩(前缀压缩)索引

    myisam使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,默认只压缩字符串,但通过参数配置也可以对整数做压缩,myisam压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其 ...

  9. 关于服务端控件textbox的disabled属性设置为disabled后在服务端无法取值的问题

    在asp.net 1.x版本中,当textbox控件的disabled属性设置为disabled的时候看,在服务端还是可以通过控件id.text获取到textbox的值的,只是不能输入值而已.但是在以 ...

  10. IDA Pro 权威指南学习笔记(四) - IDA 用户界面的基本规则

    基本规则: IDA 不提供撤销功能 如果由于不小心按下某个键,导致数据库文件发生意外,这时需要将显示窗口恢复到以前的状态 几乎所有的操作都有其对应的菜单项.热键和工具栏按钮 IDA 的工具栏高度可配置 ...