意图

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

动机

将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一就是引入一个外观对象,它为子系统中较为一般的设施提供了一个单一而简单的界面。

比如,我们现在有一个Scheudle Server(调度服务器),它为客户提供了开机,读取初始化配置文件,加载驱动,释放资源,关闭文件,关闭电源等等API,而客户每次使用它,从开机到开始使用的每一步都需要自己配置,当然这些接口非常重要,但是我们就是想简单的使用,不需要自定义配置,因此,我们需要一套简单的接口,该接口会为我们完成机器的一系列操作,而我们只要专注于我们的具体业务逻辑。这_Facade_模式的作用。

适用性

在遇到以下情况使用_Facade_模式:

  • 为一个复杂的系统提供一个简单的接口。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的简单类。这样使得系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制系统的用户带来了一些使用上的困难。_Facade_模式可以给我们一个缺省的配置,而这一配置对绝大多数用户足够了。比如我们使用电脑的时候,我们不会逐一项的对系统进行配置,它默认的配置对我们来说就够用了,而如果你要让系统提供web、ftp等服务时,为了达到最好的性能,就可能详细的配置一下。_Facade_就是我们需要的那个缺省配置。
  • 当你需要构建一个层次结构的子系统时,使用_Facade_模式定义子系统中的每层入口点。如果子系统之间是相互依赖的,你可以使用_Facade_进行通讯,从而简化它们的依赖关系。

结构

参与者

  • Facade

    • 知道哪些子系统负责处理请求
    • 将客户的请求代理给适当的子系统对象
  • Subsystem classes
    • 实现子系统功能
    • 处理Facade指派的任务
    • 没有Facade的信息,及没有指向Facade的引用或指针。

协作

  • 客户程序通过发送请求给Facade的方式与子系统通讯,Facade将消息转发给合适的子系统对象。尽管是子系统的相关对象做实际的工作,但Facade模式本身也必须将它的接口转换成子系统的接口。
  • 使用Facade的客户程序不需要直接访问子系统对象。

相关模式

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

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

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

转载于:https://www.cnblogs.com/xiaojintao/p/6358562.html

Facade(外观模式)相关推荐

  1. 设计模式笔记 10.Facade 外观模式(结构型模式)

    10. Facade 外观模式      2008-8-18 动机(Motivation) 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种 ...

  2. 设计模式10: Facade 外观模式(结构型模式)

    Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...

  3. 设计模式学习之---Facade(外观)模式

    1.Facade外观模式,是一种接口型模式.这种模式的目的在于,它为子系统中的一组接口,定义了一个更高层次的接口,通过这个接口,提供一个统一的接口,使子系统更加容易使用. 2.实现:创建一个新的类,提 ...

  4. Facade外观模式

    Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.在这里我想举一个例子: ...

  5. php5.1 facade,php设计模式 Facade(外观模式)

    模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加 ...

  6. 设计模式之Facade(外观)模式

    我们通过一个简单的开关电脑模拟程序来说明Facade模式(外观模式) CPU类 public class Cpu {  public void start()  {   system.out.prin ...

  7. [php]php设计模式 Facade(外观模式)

    1 <?php 2 /** 3 * 外观模式 示例 4 * 5 * 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得这一子系统更加的容易使用 6 */ 7 class SubSyt ...

  8. Facade(外观模式) 结构型

    外观模式 一.概述 1.结构 2.适用场景 3.优缺点 4.区别 二.实例 一.概述 外观模式是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接 ...

  9. 浅谈Facade外观模式

    一. 基本概念 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多 ...

  10. C#设计模式系列 9 ----Facade外观模式之--天河城购物

    1.理论定义 外观模式   把  分散的子系统,集合成一个系统,提供一站式服务. 2.应用举例 需求描述: 聂小倩 和 宁采臣是一对小富则安 的聊斋夫妻.住在比较偏远的小乡村. 今天,两人初次来到大城 ...

最新文章

  1. INFO:在InstallShield中修改安装包压缩.cab包的大小
  2. 五分钟学会HTML5!(二)
  3. python opencv检测人脸
  4. ACE_Message_Block功能简介
  5. 适配器(Adaptor)模式
  6. AJAX+json+jquery实现预加载瀑布流布局
  7. Nand Flash Yaffs系统大量写入数据失败问题的解决方法。
  8. 使用Docker运行oracle11g企业版和简单配置
  9. P1855 榨取kkksc03
  10. Android常见的设计模式详解
  11. Android 编码规范:(五)避免创建不必要的对象
  12. 2、Jupyter Notebook 快速入门
  13. 宏程序编程实例,简单易懂
  14. Word提示:“向程序发送命令时出现问题”解决方法
  15. wordpress pdf_9个适用于WordPress的最佳PDF插件
  16. MinGW32编译ffmpeg+libsrt
  17. uni-app小程序,实现根据中文首字母排序功能
  18. mysql重置所有表_清空mysql指定库里所有表数据
  19. ZF GE5060F47/153
  20. 开通微信零钱通的方法微信免手续费提现

热门文章

  1. python大作业外星人入侵_【python3小白上路系列】外星人入侵——开始
  2. 初中生学计算机网络应用怎么样,初中生读计算机网络技术专业怎么样?小编解答...
  3. java实现红包要多少钱_java实现红包的分配算法
  4. java对hashmap迭代_Java:通过HashMap迭代,这样更有效率?
  5. android版本如何修改时间,如何修改Android系统默认时间
  6. 玩cf出现outofmemory_CF画质粗糙平衡感人,却能历经十年经久不衰,靠的是什么?...
  7. qt 嵌入web页面_Qt嵌入浏览器(三)——QWebEngine与Https
  8. Auto-Configuration Error: Cannot find gcc or CC
  9. C++网络编程快速入门(一):TCP网络通信基本流程以及基础函数使用
  10. 黑色背景下,计算照片白色的区域面积和周长