Facade(外观)

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

在以下情况使用:

  • 当你要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变的越来越复杂,大多数模式使用时都会产生更多更小的类。这使得子系统更具有可复用性,也更容易对子系统进行定制,但也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来讲已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
  • 客户程序与抽象类的实现部分之间存在很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
  • 当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,可以让它们仅通过Facade进行通信,从而简化了它们之间的依赖关系。

实现

Facade模式对客户屏蔽了子系统组件,减少了客户处理的对象的数目并使得子系统使用起来更加方便。因为客户不需要直接访问子系统对象。

就像总闸一样,房间有许多电器,当然可以一个一个关,但是可以设一个总闸,只需要关闭总闸就可以关闭所有的电器。

电器:

public class Computer {public void turnOff(){System.out.println("电脑关机");}
}
public class Light {public void turnOff(){System.out.println("关灯");}
}
public class TV {public void turnOff(){System.out.println("电视关机");}
}

总闸

public class MasterSwitch {public void turnOff(){new Computer().turnOff();new Light().turnOff();new TV().turnOff();}
}

Main

public class Main {public static void main(String[] args) {new MasterSwitch().turnOff();}
}

相关模式

Abstract Factory模式可以与Facade模式一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。Abstract Factory也可以代替Facade模式隐藏那些与平台相关的类。
Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通信进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对像知道中介者并与他通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道Facade的存在。
通常来讲,仅需要一个Facade对象,因此Facade对象通常属于Singleton模式。

GOF 设计模式Facade模式 笔记相关推荐

  1. GOF 设计模式 Decorator模式 笔记

    Decorator(装饰) 意图:动态的给一个对象添加一些额外的职责.就添加功能来说,Decorator模式相比生成子类更为灵活 结构图: 在以下情况适合使用 在不影响其他对象的情况下,以动态,透明的 ...

  2. GOF 设计模式 builder模式笔记

    Builder(生成器) 意图:将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示. 在以下情况使用Builder模式 当创建复杂的对象应该独立于该对象的组成部分以及它们的装配 ...

  3. 重学设计模式 - Facade模式

    1.     Facade模式简介 Façade在建筑领域的意思是:(掩饰真相的)门面,也就意味着,如果你想探究更细节的真相就需要经过Façade. <设计模式>一书中对Façade模式的 ...

  4. C++设计模式-Facade模式

    Facade模式 作用:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 动机 将一个系统划分成为若干个子系统有利于降低系统的复杂性.一 ...

  5. Java设计模式-代理模式笔记

    代理模式 0 什么是代理模式 理解方式1 理解方式2 1 静态代理 1.1 代码实现 1.2 方法解读 1.3 优缺点 2 动态代理 2.1 具体实现 2.2 方法解读 2.3 注意 3 Cglib代 ...

  6. GoF设计模式——状态模式(C++实现)

    文章目录 概念 UML结构图 代码实现 状态模式的使用场景 概念 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为. 在探讨状态模式的优雅之前,先来看看以下代码场景: enum ...

  7. 设计模式-Facade模式

    门面(Facade)模式的理解与应用 概念 门面模式,指子系统的外部与其内部的通信必需通过一个统一的门面(Facade)对象进行,示意图如下: 应用场景 为一个复杂子系统提供一个简单接口 子系统常常因 ...

  8. 门面设计模式(Facade Pattern)

    GOF设计模式 Facade Pattern 门面设计模式 门面模式例子:我有一个专业的Nikon相机,我就喜欢自己手动调光圈.快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会.幸好相机 ...

  9. GoF设计模式之代理设计模式

    该文章首发于GoF设计模式-代理模式 概述 代理模式(Proxy Pattern),为其他对象提供一种代理以控制对这个对象的访问. 代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可 ...

最新文章

  1. PHP获取时间排除周六、周日的两个方法
  2. onchange onpropertychange 和oninput事件的区别
  3. 挖洞技巧:任意账号密码重置
  4. WARN HiveConf: HiveConf of name hive.metastore.local does not exist注意事项
  5. C/C++语言函数学习(4)字符串处理函数
  6. springboot整合websocket实现简易版单人聊天
  7. 硬件基础知识---(3)电阻2
  8. AspNetPager使用方法
  9. 解决Oracle安装过程中出现的缺少KEY_XE.reg文件的问题
  10. WinAPI之ReleaseSemaphore
  11. 微信公众号运营必备神器汇总
  12. php7列目录_linkinfo()
  13. python实现pdf格式转换图片格式
  14. 2018-8-10-三种方式设置特定设备UWP-XAML-view
  15. 交换机的各种工作模式
  16. 思科ISR4400交换机查看光模块光功率
  17. python爬b站弹幕_【Python爬虫】第五课(b站弹幕)
  18. 形式语言与自动机理论(1)----基础介绍
  19. activiti 6.0 editor汉化详解
  20. 《你来画,我来猜》游戏简单实现(html、css、jquery)

热门文章

  1. 科普---------------------------------BL锁
  2. Unicode标准以及其常见的编码方案
  3. 植物大战僵尸超Z联赛高分攻略
  4. git支持的协议大全
  5. Substrate Tutorials:Create Your First Substrate Chain (single-node)
  6. 要你命三千又三千 的 考研计划
  7. 用于监控分布式系统的四个黄金信号
  8. 电脑CPU被占用100%?驱动人生教你如何解决
  9. 华为金融行业解决方案讨论
  10. 迈德威视MindVision相机配置文件的保存与加载/相机参数移植