目录
什么是门面模式
门面模式如其名称所述,是内部功能对外的用户界面。就如同门面一样,将自身内在的复杂功能实现隐藏,而对外暴露简单的用户界面。
为什么要用门面模式
在项目里当一个系统要去完成一个功能时,很多情况下都需要其多个子系统服务联合才能完成。而对应外界的调用方来说,是不需要关心你系统内部子系统之间是如何配合的。所以这个时候使用门面模式,将子系统的功能隐藏在门面之下,而对外提供简单统一的门面接口,此后内部子系统如何变化,只需门面接口对外不变,对用户调用来说就是不变的。
门面模式组成
门面类
public class Facade {
private ComObj1 cj1;
private ComObj2 cj2;
private CombinObj cbj;
public Facade() {
cj1 = new ComObj1();
cj2 = new ComObj2();
cbj = new CombinObj(cj1, cj2);
}
public void doC1() {
cj1.doSomething1();
}
public void doC2() {
cj2.doSomething2();
}
public void doCbj() {
cbj.doSomething();
}
}
组件类
public class ComObj1 {
public void doSomething1(){
System.out.println("com obj 1 do 1");
}
public void doSomething2(){
System.out.println("com obj 1 do 2");
}
}
public class ComObj2 {
public void doSomething1(){
System.out.println("com obj 2 do 1");
}
public void doSomething2(){
System.out.println("com obj 2 do 2");
}
}
public class CombinObj {
private ComObj1 cj1;
private ComObj2 cj2;
public CombinObj(ComObj1 cj1, ComObj2 cj2) {
this.cj1 = cj1;
this.cj2 = cj2;
}
public void doSomething(){
System.out.println("联合完成-----");
cj1.doSomething1();
cj2.doSomething2();
}
}
测试驱动
public class Main {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doC1();
facade.doC2();
facade.doCbj();
}
}
需要注意的几点
门面应该保持简单,不要耦合具体业务逻辑,所以示例中才有CombinObj类,而不直接在门面来对子系统进行整合。