其他分享
首页 > 其他分享> > 设计模式学习笔记--外观模式(详细笔记)

设计模式学习笔记--外观模式(详细笔记)

作者:互联网

文章目录

1. 概述

使用背景:

菜鸟教程

降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。

定义:

《大话设计模式》

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

菜鸟教程

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

《图说设计模式》

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

**类型:**结构型

结构:

《大话设计模式》

image-20211213105642540

《深入设计模式》

image-20211213112832149

适用场景:

《大话设计模式》

这要分三个阶段来说:

菜鸟教程

《深入设计模式》

子系统通常会随着时间的推进变得越来越复杂。 即便是应用了设计模式, 通常你也会创建更多的类。 尽管在多种情形中子系统可能是更灵活或易于复用的, 但其所需的配置和样板代码数量将会增长得更快。 为了解决这个问题, 外观将会提供指向子系统中最常用功能的快捷方式, 能够满足客户端的大部分需求。

创建外观来定义子系统中各层次的入口。 你可以要求子系统仅使用外观来进行交互, 以减少子系统之间的耦合。

实现方式:

  1. 考虑能否在现有子系统的基础上提供一个更简单的接口。 如果该接口能让客户端代码独立于众多子系统类, 那么你的方向就是正确的。
  2. 在一个新的外观类中声明并实现该接口。 外观应将客户端代码的调用重定向到子系统中的相应对象处。 如果客户端代码没有对子系统进行初始化, 也没有对其后续生命周期进行管理, 那么外观必须完成此类工作。
  3. 如果要充分发挥这一模式的优势, 你必须确保所有客户端代码仅通过外观来与子系统进行交互。 此后客户端代码将不会受到任何由子系统代码修改而造成的影响, 比如子系统升级后, 你只需修改外观中的代码即可。
  4. 如果外观变得过于臃肿, 你可以考虑将其部分行为抽取为一个新的专用外观类。

优点:

菜鸟教程

《图说设计模式》

缺点:

菜鸟教程

《图说设计模式》

使用注意:

与其他设计模式的联系:

《深入设计模式》

《图解设计模式》

Abstract Factory模式(第8章)
可以将Abstract Factory模式看作生成复杂实例时的Facade模式。因为它提供了“要想生成这个实例只需要调用这个方法就OK了”的简单接口。
Singleton模式(第5章)
有时会使用Singleton模式创建Facade角色。Mediator模式(第16章)
在Facade模式中,Facade角色单方面地使用其他角色来提供高层接口(API )。
而在Mediator模式中,Mediator角色作为Colleague角色间的仲裁者负责调停。可以说,Facade模式是单向的,而Mediator角色是双向的。

识别方法: 外观可以通过使用简单接口, 但将绝大部分工作委派给其他类的类来识别。 通常情况下, 外观管理着其所使用的对象的完整生命周期。

2. 使用实例

菜鸟教程

《深入设计模式》

image-20211213112806915

下面是一些核心 Java 程序库中的外观示例:

《重学Java设计模式》

image-20211213113558173

标签:外观,--,接口,Facade,笔记,模式,设计模式,子系统
来源: https://blog.csdn.net/qq_37132495/article/details/121902202