设计模式(九):外观模式

2018-07-29  本文已影响0人  Java技术范

01.模式动机

    设想一下在学校,你进宿舍的时候要用门禁卡,进入图书馆的时候要使用图书馆的卡,吃饭的时候要使用饭卡;一天你就要背着各种卡到处跑,尽管这些都不是很重,但是每次还有进行筛选之后才适用于不同的场景,会不会很累?考虑到这样一点,很多学校就将3卡合一,这样就非常方便了。在软件系统设计中,也存在这样的问题是否可以通过一个门面,进行统一的访问呢?今天我们来讲解外观模式,其目的就是解决多套子系统之间的统一访问问题。

02.模式定义

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

03.模式结构

外观模式包含如下角色:

04.时序图

05.代码示例

    这里我们还是手机为例子,市场上出现了很多无线充电的手机,例如小米8,IPhonex,这是我们今天的两个类:

小米手机类

想象一下,我们如果没有一种能同时兼容两种手机的无线充电器,也就是说每一个手机充电必须使用自己的无线充电器,那么针对于两种手机,必须要有两种无线充电器,这样,如果我们同时拥有多个手机,我们出门就要同时携带多个充电器。针对于人类,一直都是聪明的,我们是否能造出来一个充电器就可全部解决呢?这就是相当于我们今天的外观角色,代码如下:

最后在使用的时候,我们只需要进行一个充电器即可:

06.模式分析

    根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。

    外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。

    外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。

    外观模式的目的在于降低系统的复杂程度。

    外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。

07.模式优点

外观模式的优点

08.模式缺点

外观模式的缺点

09.适用环境

在以下情况下可以使用外观模式:

上一篇 下一篇

猜你喜欢

热点阅读