一、原理讲解

门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用。

1.1意图

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

1.2应用场景

  • 当你要为一个复杂子系统提供一个简单接口时;
  • 客户程序与抽象类的实现部分之间存在着很大依赖性;
  • 当你需要构建一个层次的子系统时,使用Facade模式定义子系统中每层的入口点;

1.3结构图(UML图)

1.4代码实现步骤

a1 定义一个门面接口类Facade,定义两个接口函数openSwitch()和closeSwitch(),提供客户端统一调用;
a2 定义两个子系统类Television和WaterHeater,都拥有两个成员函数openSwitch()和closeSwitch(),两个的功能都需要打开开关和关闭开关;
a3 在门面类Facade的成员函数openSwitch()和closeSwitch()中,统一调用调用子系统的开启开关和关闭开关功能;

二、实现代码

比如本例子中所有打开开关和关闭开关分别是两个接口,比如电视、热水器都要打开开关,所以可以用门面模式用一个打开开关接口统一隔离和管理;
FacadePattern.cpp

#include <iostream>using namespace std;#define DELETE(pointer) delete pointer; pointer=nullptrclass Television {public:void openSwitch() { cout << "open switch of Television!" << endl; }void closeSwitch() { cout << "close switch of Television!" << endl; }
};class WaterHeater {
public:void openSwitch() { cout << "open switch of WaterHeater!" << endl; }void closeSwitch() { cout << "close switch of WaterHeater!" << endl; }
};class FacadePattern { //门面模式
public:void openSwitch() {  television.openSwitch(); waterHeater.openSwitch(); } //提供客户端使用的统一接口void closeSwitch() { television.closeSwitch(); waterHeater.closeSwitch(); }private:Television television; //子系统类,只跟门面模式类耦合,不跟客户端偶尔;实现子系统与客户端的接口隔离WaterHeater waterHeater;
};void doFacadePattern()
{FacadePattern *facadePattern = new FacadePattern(); facadePattern->openSwitch();facadePattern->closeSwitch();DELETE(facadePattern);
}

mian.cpp

#include <iostream>extern void doFacadePattern();int main()
{doFacadePattern();system("pause");return 1;
}

三、总结

门面模式主要意图就是提供统一接口,实现子系统和客户端接口隔离,降低系统耦合度,有利于复杂系统功能模块统一管理和编程,使得初级程序员也能够参与大型项目,只需要将其写的代码功能用一个接口隔离开来,然后单元测试,而不影响其它模块。

四、参考内容

设计模式C++实现:门面模式
设计模式 c++版(16)——门面模式
陈建忠设计模式(参考:哔哩哔哩C++设计模式!!!)
Erich Gamma,Richard Helm.《设计模式 可复用面向对象软件的基础》[M].机械工业出版社,2019:

C++设计模式——门面模式(facade pattern)相关推荐

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

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

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

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

  3. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用

    文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...

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

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

  5. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  6. 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  7. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  8. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  9. 门面设计模式php,php设计模式-门面模式(Facade Pattern)

    门面模式概念 门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口.使得子系统更容易使用. 引入门面角色之后,用户只需要直接与门面角色交互,用 ...

最新文章

  1. STL 队列queue
  2. ImportError: cannot import name 'is_string_like'
  3. svn文件大小类型限制,提交必须加多少字的说明
  4. 贪心算法:跳跃游戏总结
  5. Vue生命周期---vue工作笔记0013
  6. TaskService API
  7. 安徽蚌埠市国家计算机等级考试官网,2019年下半年安徽省蚌埠市全国计算机等级考试费用...
  8. struts2的package和result的标签的属性
  9. Shell中的变量替换
  10. jpeglib画质的代码分析
  11. CSDN创始人董事长蒋涛对话阿里云张献涛:距离云计算终极目标还有多远?
  12. 金融现金贷用户数据分析和用户画像
  13. 代理服务器(Proxy)
  14. Android聊天室
  15. 网页录音,html5录音
  16. 计算机三级网络技术第六章(第一轮)
  17. [医学图像Transformer]TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation
  18. 自己过不好的生活,干嘛甩锅给手机?
  19. MIPI D-PHY M-PHY C-PHY
  20. 一键重装微软官方系统

热门文章

  1. 小程序解析html代码,小程序怎么要解析html代码?----简易讲解
  2. 数据测试面试mysql_测试开发面试集锦_数据库
  3. Web小案例——智能表单
  4. 基于FCM模糊C均值的数据聚类算法matlab仿真
  5. 动画漫展Cosplay角色扮演/手办模型玩具宣传视频PR模板
  6. 戴尔台式机7080MT(I7处理器英特尔10700)安装centos
  7. 高项第三版十大管理、49个过程、五大过程组【趣味联想记忆口诀,助你看这一篇就牢牢记住!】
  8. Selenium实战滑块验证码登陆网站
  9. nodejs共享充电宝投放管理系统vue前端项目源码介绍
  10. 万字长文详解数据治理体系