门面模式可以用于各子系统之间的解耦,添加一个调停者(门面)与各个系统都建立关系,每个子系统之间的调用都通过调停者,从而实现解耦。
例
class Facade{
private static final Facade facade = new Facade();
private final SysA a = new SysA();
private final SysB b = new SysB();
private final SysC c = new SysC();
public void executeA(){
a.method();
}
public void executeB(){
b.method();
}
public void executeC(){
c.method();
}
public static Facade getFacade() {
return facade;
}
}
class SysA{
public void method(){
Facade facade = Facade.getFacade();
facade.executeB();
facade.executeC();
}
}
class SysB{
public void method(){
Facade facade = Facade.getFacade();
facade.executeA();
facade.executeC();
}
}
class SysC{
public void method(){
Facade facade = Facade.getFacade();
facade.executeB();
facade.executeA();
}
}
UML图
后话
从类图可以看出各个子系统之间实现了解耦。那么解耦的好处是什么呢?比如,SysA表示车,如果SysA写死在SysB,那么当我们想更换车的类型时(比如从摩托车换成汽车),不仅仅SysB需要修改,所有依赖SysA的子系统都要修改,这样耦合性太强了,修改起来非常麻烦。而通过门面模式,我们只需要在Facade中简单替换。