门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式。其定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。笔者在学习门面模式有一种惊叹,这个模式不是自己日常开发中经常用的么?原来这也是一种设计模式呀!看来我们在默默搬砖的时候,人家早就把它提炼总结成为一个设计模式了。来看一下我们日常用的Controller。我们有三个Service类:
public class ServiceA { public void dosomething(){ System.out.println("执行任务A"); } }
public class ServiceB { public void dosomething(){ System.out.println("执行任务B"); } }
public class ServiceC { public void dosomething(){ System.out.println("执行任务C"); } }
有一个提供统一访问的门面Controller:
public class FacadeController { private ServiceA serviceA = new ServiceA(); private ServiceB serviceB = new ServiceB(); private ServiceC serviceC = new ServiceC(); public void methodA(){ serviceA.dosomething(); } public void methodB(){ serviceB.dosomething(); } public void methodC(){ serviceC.dosomething(); } }
小伙伴们是不是有了似曾相识的感觉!门面模式就是这么简单,大家都是这么用的~
门面模式有什么优缺点呢?我们一起来总结一下吧!
1、减少系统的依赖:想想看,如果我们不使用门面模式,外界可以直接访问到子系统内部,相互之间是一种强耦合关系,这样的强依赖是系统设计所不能接受的,门面模式的出现就很好的解决了这个问题,所有的依赖都是依赖门面的,与子系统无关。
2、提高了系统的灵活性:依赖减少了,灵活度自然高了,只要不影响门面对象,子系统的变化任由你变化。
3、提高了系统的安全性:你想访问子系统的哪些业务就开通哪些业务,不在门面上开通的方法,你也休想访问到。
4、遵守迪米特法则。
1、不符合开闭原则:增加子系统和扩展子系统行为时或者修改门面对象,可能会带来未知的风险。
2、容易违背单一职责原则:当门面对象设计的过于冗余的时候,很肯能导致门面的对象职责不再单一。
原文:https://www.cnblogs.com/chalice/p/14299734.html