1.定义
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用
外观模式一般是分布式应用和系统架构中的应用服务层的设计中常用的方式,并且一般结合外观模式+DTO来完成服务层的设计,提供分布式应用服务的高效服务,外观模式我们可以这样理解,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。
2.实现原理和结构
外观(Facade)角色
定义了子系统的多个模块对外的高层接口,通过需要调用内部多个模式,从而能把客户的请求代理给适当的子系统对象。
Clients
客户对象通过一个外观接口读写子系统中各接口的数据资源。
模式(子系统)角色:
接受外观对象的委派,真正实现功能,各个模块之间可能有交互,需要注意的是,外观对象知道各个模块,但是各个模式不应该知道外观对象。
实现原理图:
![这里写图片描述](https://img-blog.csdn.net/20160424173012763)
3.使用场景
(1) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(2) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
4.优缺点
优点:(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
缺点:
(1)不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性
(2)在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”