1、意图

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

2、适用性

以下情况使用Facade模式

(1)当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用笥,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层

(2)客户程序与抽象类的实现部分之间存在很大 的依赖性。引入facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性

(3)当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们之间的依赖关系。

3、参与者

(1)Facade:知道哪个子系统类负责处理请求;将客户的请求代理给适当的子系统对象

(2)Subsystem classes:实现子系统的功能;处理由Facade对象指派的任务;没有facade的任何相关信息(即没有指向facade的指针 )

4、协作

(1)客户程序通过发送请求给facade的方式与子系统通讯,facade将这些信息转发给适当的子系统对象。尽管是子系统中的有关对象在做实际工作,但是facade模式本身也必须将它的接口转换成子系统的接口。

(2)使用facade的客户程序不需要直接访问子系统对象。

5、效果

facade模式有下面一些优点

(1)它对客户屏蔽子系统组件,因而减少了客户处理的对象数目并使得子系统使用起来更加方便。

(2)它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是贤淑耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤为重要。

(3)如果应用需要,它并不限制它们使用子系统类。因些你可以在系统易用性和通用性之间加以选择。

6、相关模式

AbstractFacotry 模式可以与Facade模式一起使用以提供一个接口,这一接口用来以一种子系统独立的方式创建子系统对象。AbstractFacotry也可以代替Facade模式隐藏那些与平台相关的类

Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能 。然而,Mediator的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并与它通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道facade的存在。

通常来讲,仅需要一个Facade对象,因此 facade对象通常属于Singleton模式。

结构型模式之Facade模式相关推荐

  1. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  2. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

  3. 结构型设计模式之组合模式

    结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...

  4. Java设计模式 -11- 外观模式(Facade模式)

    Java设计模式 -11- 外观模式(Facade模式) 前言 外观模式的定义与特点 优点: 缺点: 外观模式的结构与实现 1. 模式的结构 2. 模式的实现 外观模式的应用实例 外观模式的应用场景 ...

  5. 创建型、结构型、行为型模式(2)

    来源:http://blog.csdn.net/wulingmin21/article/details/6757111 创建型模式 Singleton模式解决的是实体对象个数的问题. 除了Single ...

  6. 创建型、结构型、行为型模式(1)

    来源:http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Struct ...

  7. 设计模式(结构型)之享元模式(Flyweight Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  8. 设计模式——结构型之用桥梁模式(Bridge Pattern)将“抽象”与“实现”解耦(五)

    引言 相信对于现实生活中这样的情况都不陌生,比如说开关与它具体控制的电器,开关的类型多种多样,而电器也是千变万化,两者之间相对独立变化却又耦合在一起,再比如说奶茶店的奶茶,有不同规格大小.不同口味.不 ...

  9. 29 外观模式(Facade模式)详解

    结构型模式: ​ 代理模式(Proxy)​.​ 适配器模式(Adapter)​.桥接模式(Bridge)​.装饰模式 (Decorator ).​外观模式(Facade) ​.享元模式(Flyweig ...

最新文章

  1. vb中的webrowser无法进行滑块验证_专题63 验证动量守恒定律
  2. markdown转html
  3. ABAP SOAMANAGER暴露的函数function module,以web service方式执行的运行时细节
  4. mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考
  5. javascript --- 瀑布流的实现
  6. 开放下载!从RCNN到SSD,这应该是最全的一份目标检测算法盘点
  7. 【比赛】计算机领域有哪些常见的比赛
  8. Unity的包体压缩以及音效优化
  9. Axure原型设计相关:Axure RP8中继器实例(附rp文件)——列表的增删改查、分页
  10. 计算机一级移动是复制粘贴吗,学会着几种复制粘贴的方法你做事会事半功倍
  11. win10基于QT开发手机安卓App
  12. 设置linux kernel 日志打印方法
  13. Android流星雨效果---史上最炫,浪漫,值得陪你女朋友一起看~ [捂脸]
  14. 手机号号码段及js验证
  15. 2010破局,联想笔记本用AMD芯
  16. 见或不见 →仓央嘉措
  17. 怎么把科学计算机的fix弄掉,如何消除计算器上的FIX功能
  18. ACCESS 2003数据库的创建
  19. 【新能源】这家新能源汽车动力电池工厂车间视频,最近刷爆了朋友圈!!
  20. 让你用得最爽的 Windows 软件是什么?

热门文章

  1. python画图三维-对python mayavi三维绘图的实现详解
  2. 零基础学python 明日科技-明日科技 - 课程
  3. python代码块-Python中的代码块和非代码块是什么
  4. 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
  5. python中数据分析的流程为-用Python进行数据分析-1
  6. python笔记基础-Python基础知识
  7. python常用内置模块-Python常用内置模块之xml模块(详解)
  8. python数字类型-Python基础:数据类型-数字(5)
  9. python画饼图-python matplotlib画饼图
  10. python自学教程推荐-学习python中的pandas有没有好的教程推荐?