《Head-First-设计模式》笔记10-外观模式

  1. 定义
  2. 类图
  3. 实例
    1. 构造家庭影院的外观
    2. 实现简化的接口
    3. 测试
  4. 外观模式和适配器模式
  5. 优点
  6. 缺点
  7. 值得注意的地方

定义

外观模式(Facade Pattern):外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

类图

外观模式

实例

书中的例子:家庭影院系统,内含DVD播放器、投影仪、自动屏幕、环绕立体声等。那么当你想看一部DVD时,需要同时启动这些。

构造家庭影院的外观

实现简化的接口

测试

外观模式和适配器模式

外观模式和适配器模式的差异,在于它们的意图。

  • 适配器模式的意图是,改变接口以符合客户的期望。
  • 外观模式的意图是,提供子系统的一个简化接口。

优点

  • 对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。
  • 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。
  • 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
  • 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。

缺点

  • 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。
  • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

值得注意的地方

  1. 外观模式对接口进行了简化,但这并不意味着对子系统进行彻底封装。如果有必要,这些子系统的接口还可以继续暴露给客户,这就是所谓的高级功能(或称为自定义)。
  2. 外观模式不能新增功能,但他可以将某些功能按次序执行。例如先打开DVD,后播放DVD。
  3. 子系统与外观不是一对一关系,是多对多关系。一个子系统可以拥有多个外观,一个外观可以调用多个子系统。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:《Head-First-设计模式》笔记10-外观模式

文章字数:684

本文作者:Bin

发布时间:2018-07-13, 22:01:55

最后更新:2019-08-06, 00:07:35

原始链接:http://coolview.github.io/2018/07/13/Head-First-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E3%80%8AHead-First-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8B%E7%AC%94%E8%AE%B010-%E5%A4%96%E8%A7%82%E6%A8%A1%E5%BC%8F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录