定义
外观模式(Facade Pattern):外观模式定义了一个高层接口,为子系统中的一组接口提供一个统一的接口。外观模式又称为门面模式,它是一种结构型设计模式模式。
定义解读:通过这个高层接口,可以将客户端与子系统解耦:客户端可以不直接访问子系统,而是通过外观类间接地访问;同时也可以提高子系统的独立性和可移植性。
适用场景
子系统随着业务复杂度的提升而变得越来越复杂,客户端需要某些子系统共同协作来完成某个任务。
在多层结构的系统中,使用外观对象可以作为每层的入口来简化层间的调用。
成员
外观模式包括客户端共有三个成员:
客户端类(Client):客户端是意图操作子系统的类,它与外观类直接接触;与外观类间接接触
外观类(Facade):外观类知晓各个子系统的职责和接口,封装子系统的接口并提供给客户端
子系统类(SubSystem):子系统类实现子系统的功能,对外观类一无所知
场景概述
一个智能家居系统,人是客户端类,各个电器如空调、CD、DVD、投影仪、音响等是子系统,控制各个电器的遥控器是外观类,人可以通过遥控器一键打开所有电器,一键关闭所有电器,一键打开CD让音响播放音乐等。
image image优点
实现了客户端与子系统间的解耦:客户端无需知道子系统的接口,简化了客户端调用子系统的调用过程,使得子系统使用起来更加容易。同时便于子系统的扩展和维护。
符合迪米特法则(最少知道原则):子系统只需要将需要外部调用的接口暴露给外观类即可,而且他的接口则可以隐藏起来。
缺点
违背了开闭原则:在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的代码。
网友评论