介绍
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统中子系统的复杂性,简化访问操作
何时使用:
- 客户端不需要知道系统的内部构造,整个系统只需要提供一个“接待员”即可
- 定义系统的入口
- 系统相对独立
- 预防低水平人员带来的风险(因为不需要深入了解子系统,避免了修改)。
如何解决
- 客户端与系统解耦,外观类与系统耦合
关键代码:
- 在客户端和复杂系统之间再加一层接口,这一层接口将调用顺序、依赖关系等处理好
应用实例
- 去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便
优点:
- 减少系统相互依赖
- 提高灵活性
- 提高了安全性
缺点:
- 不符合开闭原则,如果系统内部需要改变,就需要改变接口
注意:在层次化结构中,可以使用外观模式定义系统中每一层的入口。
实现
创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker。
用户通过使用ShapeMaker类进行操作,创建出各种图形
UML类图
1、创建接口
1 | public interface Shape { |
2、创建实现接口的实体类
1 | public class Rectangle implements Shape { |
可以认为shape接口与 shape的实现类就是复杂系统内部的组成
3、 创建外观类
1 | public class ShapeMaker { |
这个类就是前面两步骤的系统对外界给出的操作接口,外界只能通过此接口操作系统
4、使用接口
1 | public class FacadePatternDemo { |
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/14/designPattern/2020-03-14-appearancePattern/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!