门面模式-Facade-外观模式
这个模式的名字还挺多的,如题吧!但是虽然名字多,但是它简单啊!!!
0x0 外观模式介绍
先看一个场景
场景:注册一个公司需要(简化版本)
1、去工商服务大厅核名、填写注册信息。
2、去银行开户
3、去开社保账号等
如果一个人自己去办理,很麻烦。这个时候就出现了中介来帮助我们来屏蔽这些麻烦。
中介就是facade,我们只管给中介说:我要创办一个公司,中介自己去访问各个机构去把事情办了!!!
解决问题
子系统和外界之间的调用更加明晰。降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
好处
1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。3、减少系统相互依赖,提高灵活性,提高了安全性。
使用场景
1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。
0x01 实例
我们就用外观模式解决最开始引入的问题
首先定义一个解决问题的接口
<pre>
public interface DoThings {
void doThing1();
void doThing2();
}
</pre>
工商子系统
<pre>
public class GongShang implements DoThings {
@Override
public void doThing1() {
System.out.println("GongShang 核名");
}
@Override
public void doThing2() {
System.out.println("GongShang 填写资料");
}
}
</pre>
银行子系统
<pre>
public class YinHang implements DoThings {
@Override
public void doThing1() {
System.out.println("YinHang 核实信息");
}
@Override
public void doThing2() {
System.out.println("YinHang 开户");
}
}
</pre>
其他省略
0x2 外观接口
<pre>
public class MyFacade {
private GongShang gongShang;
private YinHang yinHang;
private Other other;
public MyFacade() {
this.gongShang = new GongShang();
this.yinHang = new YinHang();
this.other = new Other();
}
public void gonshangKaihu() {
this.gongShang.doThing1();
this.gongShang.doThing2();
}
public void yinhangKaihu() {
this.yinHang.doThing1();
this.yinHang.doThing2();
}
public void doOther() {
this.other.doThing1();
this.other.doThing2();
}
}
</pre>
客户端调用
<pre>
public class Main {
public static void main(String[] args) {
System.out.println("门面模式-外观模式-facade模式 !");
MyFacade myFacade = new MyFacade();
myFacade.gonshangKaihu();
myFacade.yinhangKaihu();
myFacade.doOther();
}
}
</pre>
运行效果
外观模式.png