外观模式,也叫门面模式,统一的英文定义是:Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.即给客户端提供一个统一的接口,避免了client于具体的每一个实现打交道。通过提供一个第三方的外观类来降低client与系统的耦合度。
一般的外观模式的类图较简单。如图示:
但传统的外观模式有个致命的缺点。就是在不引入新外观类的情况下,增加新的子系统可能需要修改外观类的源代码,违背了OCP。
那天上体系结构的课时,刘伟也也谈到了这个。提示了下大家,有点启发,可以改进下。增加一个抽象类,将具体的外观类[client直接调用的类]写在配置文件当中client面向抽象编程,即可满足OCP。类图如下所示:
当新增加一个外观类时,只需要写一个NewFacade 去extends AbstractFacade。就可以了。