===============================================================
提到设计模式,可能有的人就会觉得很抽象,很高深的样子,其实设计模式并没有想象中的那么高深,很多设计模式我们天天都在用,只是自己不知道自己用到的就是设计模式而已。设计模式也是在开发的基础上总结归纳得出来的,并不是什么新颖的东西,只是一种经验的总结而已,如果有觉得设计模式高深莫测的朋友,那么看看这篇门面模式我想一定会改变你的观点,门面模式会让你发出“这也是设计模式?”的感慨。
====================================================================
门面模式(Facade Pattern),又被称之为外观模式。门面模式提供了一个统一的接口,这个接口可以用来访问相同子系统或者不同子系统之中的一群接口。门面模式使得系统更加容易调用,属于结构型模式。
===================================================================
门面模式主要包含了两种角色:
-
外观角色(Facade):也称门面角色,系统对外统一接口。
-
子系统角色(SubSystem):可以同时有一个或者多个SubSystem。每个SubSystem都不是一个单独的类,而是一个类的集合。SubSystem并不知道Facade的存在,对于SubSystem而言,Facade也仅仅只是一个调用者(客户端)而已。
===================================================================
好了,装逼时刻又到了:Talk is cheap,Show you the code,先看一个非常简单的例子。
1、新建2个子系统角色类,每个类中都只有一个方法:
package com.zwx.design.pattern.facade;
public class SubSystemA {
public void doSomething(){
System.out.println(“I’m A”);
}
}
package com.zwx.design.pattern.facade;
public class SubSystemB {
public void doSomething(){
System.out.println(“I’m B”);
}
}
2、新建一个门面类来统一提供对外调用子系统接口的方法:
package com.zwx.design.pattern.facade;
public class SimpleFacade {
private SubSystemA systemA = new SubSystemA();
private SubSystemB systemB = new SubSystemB();
public void doA(){
this.systemA.doSomething();
}
public void doB(){
this.systemB.doSomething();
}
}
3、最后新建测试类:
package com.zwx.design.pattern.facade;
public class TestSimpleFacade {
public static void main(String[] args) {
SimpleFacade simpleFacade = new SimpleFacade();
simpleFacade.doA();
simpleFacade.doB();
}
}
测试类中不会直接调用子系统,而是通过门面类来进行统一调用。
看完这个例子,大家应该会发出感慨了,这种方式我们天天都在用,原来居然就是设计模式之一的门面模式。
还有另一种写法就是假如我们一个流程里面需要很多个子系统的方法一起调用才能完成,那么这时候我们就可以对上面的示例进行改造了,如下我们再新建一个门面类:
package com.zwx.design.pattern.facade;
public class Facade {
private SubSystemA systemA = new SubSystemA();
private SubSystemB systemB = new SubSystemB();
public void doAB(){
this.systemA.doSomething();
this.systemB.doSomething();
}
}
然后测试类中就可以直接通过调用一个方法达到调用多个子系统的方法完成一个流程:
package com.zwx.design.pattern.facade;
public class TestFacade {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doAB();
}
}
=====================================================================
门面模式一般可以适用于以下两种场景:
1、当各个子系统越来越复杂时,可以提供门面接口来统一调用
2、构建多层系统结构时,利用门面对象来作为每层的入口,这样可以简化分层间的接口调用
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!