我们来学一下外观模式,外观模式又叫门面模式,提供了一个统一的接口,用来访问子系统的一群接口,那外观模式定义了
一个高层接口,让子系统更容易使用,类型是结构型的,那这里面有几个角色,一个是外观角色,他了解子系统所有的方法,
外观角色他也有自己的方法,客户端他通过调用外观角色的方法呢,来调用子系统的功能,那这里面还有个关键字,子系统,
那子系统可以是一个,可以是多个,子系统按照不同的维度,分成不同的处理模块,并不是单独的类,那子系统形成一个集合,
为外观模式的外观类,提供子系统的服务,那么接着看一下,外观模式的应用场景,当子系统越来越复杂,这个时候增加外观
模式呢,能提供简单调用的接口,还有当我们构建多层系统结构的时候,利用外观对象作为每层的入口,简化层间调用,那一会
我们coding的时候,领着大家来体会,还是很容易理解的
那我们看一下外观模式的优点是什么呢,简化了调用过程,无需深入的了解子系统,防止带来风险,这里所说的防止带来风险,
也非常好理解,对于某个功能我们只要集成到一起就可以了,无需修改子系统,不修改它也就不会带来风险,减少系统以来,松散
耦合,外观模式松散了客户端和子系统的耦合关系,客户端不与子系统直接交流,客户端和外观对象进行交流,让子系统内部的模块
很容易扩展和维护,通过使用外观模式,帮我们更好地划分访问层次,那有些方法呢,是系统外部的,有些方法呢,是系统内部的,
我们把需要暴露给外部的功能集中到外观类上,这样既方便客户端调用,也能很好隐藏内部细节,同时外观模式符合迪米特法则,
即最少知道原则,客户端不需要了解子系统内部的实现,也不需要和众多子系统模块进行交互,只要和外观类交互就可以了
外观模式的缺点是什么呢,帮我们增加子系统,扩展子系统行为的时候,容易引入风险,另外在我们增加子系统,
和扩展子系统行为的时候,是不符合开闭原则的
我们看一下和外观模式相关的设计模式,首先外观模式和中介者模式,那在这里我们还没有讲中介者模式,
但是也先介绍一下,后续回来可以看一下,那他们两个本质上的区别呢,说外观模式关注的是外界子系统之间的交互,
而中介者模式呢,关注的是子系统内部的交互,另外是外观模式和单例模式,通常我们可以把外部模式中的外观对象
做成单例模式的结合使用,还有外观模式和抽象工厂模式,那外观类可以通过抽象工厂获取子系统的例,这样呢子系统
可以将内部外观类进行屏蔽,这个也是设计模式结合使用的一种方式
接下来我们会一起来coding,来看一下UML,还有外观模式相关的源码解析