设计模式之外观模式(Fasade Pattern)
2019独角兽企业重金招聘Python工程师标准>>>
模式分析:
外观模式又称为门面模式,提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。
- 门面(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
- 子系统(SubSystem)角色 :可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB、ModuleC三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。
一个系统可以有几个门面类
在门面模式中,通常只需要一个门面类,并且此门面类只有一个实例,换言之它是一个单例类。当然这并不意味着在整个系统里只有一个门面类,而仅仅是说对每一个子系统只有一个门面类。或者说,如果一个系统有好几个子系统的话,每一个子系统都有一个门面类,整个系统可以有数个门面类。
模式优点:
- 松散耦合:门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
- 简单易用:门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
- 更好的划分访问层次:通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
转载于:https://my.oschina.net/u/2319418/blog/1609448
设计模式之外观模式(Fasade Pattern)相关推荐
- 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧: 分别是瑞雯和 ...
- 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...
- 设计模式之- 外观模式(Facade Pattern)
外观模式 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加 ...
- Java 设计模式之外观模式
一.了解外观模式 1.1 什么是外观模式 外观模式 (Facade Pattern) 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用. 想要使用外观模式, ...
- 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- 设计模式之外观模式php,PHP设计模式:外观模式
前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...
- php facade模,PHP 设计模式之外观模式 Facade
简单描述 外观模式(Facade pattern),为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 外观模式又称为门面模式,它是一种对象结构型模式,遵循迪米特法则,又称最少知道原则 ...
- php5.1 facade,php设计模式 Facade(外观模式)
模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加 ...
- JS常用的设计模式(7)—— 外观模式
JS常用的设计模式(7)-- 外观模式 外观模式(门面模式),是一种相对简单而又无处不在的模式.外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用. 用一段再简单不过的代码来表示 var ...
最新文章
- python面试-Python面试题总结
- 杭电1180java实现(bfs)
- 算法 --- 回溯法
- 身份证明检索失败,如何解决?
- 本地浏览器缓存sessionStorage(临时存储) localStorage(长期存储)的使用
- 识别和追踪主题层次的影响力者(来自2018 Machine Learning 论文学习笔记)
- 案例集锦|科技赋能,华为云GaussDB助千行百业数字化转型
- 解决sqlalchemy连接mysql报错ModuleNotFoundError: No module named ‘pymysql‘
- android kotlin类内绑定事件,Android kotlin 点击事件防重复
- zookeeper 虚拟机搭建好后 外部链接不上_Ubuntu Server搭建Hyperledger Fabric 2.1学习环境...
- c#:浅克隆和深克隆,序列化和反序列化
- 基于嵌入式linux路由转发功能的实现
- CSS文件在jsp 文件中应该放的位置
- f(x)=sinx的求导过程
- python rbf神经网络_RBF神经网络是什么?
- python 全国内地中高风险地区数量查询与可视化(分省)
- python unpack函数_python的struct.unpack函数
- 苹果电脑一直密码错误_您可能一直都在犯的安全和密码错误
- 不一样的国外广告联盟与cpa赚钱!
- [MySQL 源码] Innodb Pessimistic Insert流程
热门文章
- Android下EditText中的字体不统一问题
- android 解决java.nio.BufferOverflowException 异常
- android textView调整字体的间距和行间距
- Android Platform Codenames, Versions, API Levels, and NDK Releases
- RabbitMQ—常见报错
- 如何跳转指定页面后再次跳转到另一页面或原来的页面
- GIS+=地理信息+容器技术(4)——Docker执行
- 设置SecureCRT配色和解决乱码问题
- spring框架学习笔记(八)
- linux下删除文件名乱码文件