11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...
Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。
适用于:
为子系统中统一一套接口,让子系统更加容易使用。
1 #include <iostream> 2 using namespace std; 3 4 class SubSystemA 5 { 6 public: 7 void doThing() 8 { 9 cout << "SubSystemA run" << endl; 10 } 11 }; 12 13 class SubSystemB 14 { 15 public: 16 void doThing() 17 { 18 cout << "SubSystemB run" << endl; 19 } 20 }; 21 22 class SubSystemC 23 { 24 public: 25 void doThing() 26 { 27 cout << "SubSystemC run" << endl; 28 } 29 }; 30 31 32 class Facade 33 { 34 public: 35 Facade() 36 { 37 sysA = new SubSystemA; 38 sysB = new SubSystemB; 39 sysC = new SubSystemC; 40 } 41 ~Facade() 42 { 43 delete sysA; 44 delete sysB; 45 delete sysC; 46 } 47 public: 48 void doThing() 49 { 50 sysA->doThing(); 51 sysB->doThing(); 52 sysC->doThing(); 53 } 54 protected: 55 private: 56 SubSystemA *sysA; 57 SubSystemB *sysB; 58 SubSystemC *sysC; 59 }; 60 //普通方法 61 void main1801() 62 { 63 SubSystemA *sysA = new SubSystemA; 64 SubSystemB *sysB = new SubSystemB; 65 SubSystemC *sysC = new SubSystemC; 66 67 sysA->doThing(); 68 sysB->doThing(); 69 sysC->doThing(); 70 delete sysA; 71 delete sysB; 72 delete sysC; 73 74 return ; 75 } 76 //外观模式 77 void main1802() 78 { 79 Facade *f = new Facade; 80 f->doThing(); 81 delete f; 82 83 } 84 85 void main() 86 { 87 //main1801(); 88 main1802(); 89 system("pause"); 90 }
要点
1.Facade模式对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
2.Facade模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。
3.如果应用需要,它并不限制它们使用子系统类。因此你可以在系统易用性与通用性之间选择。
4. 在外观模式中,通常只需要一个外观类,并且此外观类只有一个实例,换言之它是一个单例类。当然这并不意味着在整个系统里只能有一个外观类,而仅仅是说对每一个子系统只有一个外观类。或者说,如果一个系统有好几个子系统的话,每一个子系统有一个外观类,整个系统可以有数个外观类。
5. 外观模式的用意是为子系统提供一个集中化和简化的沟通管道,而不建议向子系统加入新的行为。
6. 外观模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个类的层次。
适用性和优缺点
适用性
1.为一个复杂子系统提供一个简单接口。
2.提高子系统的独立性。
3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
优点
1. 松散耦合
外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。即要点2.
2. 简单易用
外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观交互就可以了,相当于外观类为外部客户端使用子系统提供了一站式服务。
3. 更好的划分访问层次
通过合理使用Facade,可以帮助我们更好的划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到外观中,这样既方便客户端使用,也很好的隐藏了内部的细节。
缺点
过多的或者是不太合理的Facade也容易让人迷惑,到底是调用Facade好呢,还是直接调用模块好。
转载于:https://www.cnblogs.com/D-DZDD/p/7341953.html
11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...相关推荐
- 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...
- 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧: 分别是瑞雯和 ...
- 设计模式(八): 从“小弟”中来类比外观模式(Facade Pattern)
在此先容我拿"小弟"这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿"小弟"来类比"外观模式".在上面一篇 ...
- 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- .net 有哪些主流的设计模式_「设计模式自习室」门面模式 Facade Pattern
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 【设计模式自习室】门面模式 Facade Pattern
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 设计模式 -结构型模式_ 装饰者模式Decorator Pattern 在开源软件中的应用
文章目录 定义 结构图 需求 装饰者模式 装饰者模式在MyBatis中的应用 小结 定义 装饰模式 Decorator : 在不改变原有功能的基础上, 动态的给一个对象添加一些额外的职责 ,非常符合开 ...
- 代理模式(Proxy Pattern)(四):HeadFirst中CD封面虚拟代理
一.问题描述 当我们在网络上加载一些图像时,限于连接宽带和网络负载,下载可能需要一些时间,所以在等待图像加载的时候,就应该显示一些东西.我们也不希望在等待图像时,整个应用程序被挂起.一旦图像加载完成, ...
- Java设计模式——外观模式【Facade Pattern】
一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...
最新文章
- vim 打开中文乱码
- FastJson解析对象及对象数组--项目经验
- 2015 年,我和华大基因立下一个小目标……
- Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流
- java 22 - 8 多线程之线程生命周期图解
- vue-cli 3.0安装和使用
- AtCoder Beginner Contest 183 总结
- 301 重定向 怎么让输入的不带www自动加上www
- Linux多线程编程
- LabelImg使用方法
- Chrome浏览器安装IE_Tab
- php 会议室预定系统,MRBS开源会议室预订系统安装
- 解决3Dmax材质编辑器重影问题
- 想要职场安全感?那就请你别停止成长
- 权限认证实现(责任链模式)
- 你们要的网页版matlab来了,速领!
- 编译原理 实验2 语法分析器的构造
- 网页图片无缝循环滚动html代码
- 计算机网络——网络层之移动IP
- FFmpeg拉取rtmp流转udp输出播放
热门文章
- 关于JavaWeb项目加密的实现 2021-04-24
- python123程序设计实验答案_Python程序设计第二次实验报告
- 文言文生成器_英语不好,学编程太困难?或许用文言文来编程你就更加容易上手了!...
- mysql高效索引覆盖索引_MySQL高效索引:覆盖索引
- java 字符转换为数字_JAVA中使用字符串转换为数字
- 用javascript来完成显示和隐藏的案例
- linux ftp远程更新,用ftp远程安装linux
- 天涯明月刀怎么导入php捏脸数据,天涯明月刀捏脸数据怎么导入 天涯明月刀捏脸数据在哪...
- android源码使用方法,android源码中使用到的设计模式(创建型)
- js 禁止android手机返回键,js禁止浏览器,微信,及手机物理键的返回