C++设计模式——门面模式(facade pattern)
一、原理讲解
门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用。
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)相关推荐
- .net 有哪些主流的设计模式_「设计模式自习室」门面模式 Facade Pattern
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 【设计模式自习室】门面模式 Facade Pattern
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...
- 外观模式 门面模式 Facade 结构型 设计模式(十三)
外观模式(FACADE) 又称为门面模式 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统基本 ...
- 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧: 分别是瑞雯和 ...
- 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- C++设计模式——原型模式(Prototype Pattern)
C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...
- 设计模式-代理模式(Proxy Pattern)
设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...
- 门面设计模式php,php设计模式-门面模式(Facade Pattern)
门面模式概念 门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口.使得子系统更容易使用. 引入门面角色之后,用户只需要直接与门面角色交互,用 ...
最新文章
- STL 队列queue
- ImportError: cannot import name 'is_string_like'
- svn文件大小类型限制,提交必须加多少字的说明
- 贪心算法:跳跃游戏总结
- Vue生命周期---vue工作笔记0013
- TaskService API
- 安徽蚌埠市国家计算机等级考试官网,2019年下半年安徽省蚌埠市全国计算机等级考试费用...
- struts2的package和result的标签的属性
- Shell中的变量替换
- jpeglib画质的代码分析
- CSDN创始人董事长蒋涛对话阿里云张献涛:距离云计算终极目标还有多远?
- 金融现金贷用户数据分析和用户画像
- 代理服务器(Proxy)
- Android聊天室
- 网页录音,html5录音
- 计算机三级网络技术第六章(第一轮)
- [医学图像Transformer]TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation
- 自己过不好的生活,干嘛甩锅给手机?
- MIPI D-PHY M-PHY C-PHY
- 一键重装微软官方系统