书上外观模式的定义:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
子系统一:
public class SubSystemOne {
public void MethodOne(){
System.out.println("子系统一");
}
}
子系统二
public class SubSystemTwo {
public void MethodTwo(){
System.out.println("子系统二方法");
}
}
门面类:
public class Facade {
SubSystemOne subSystemOne;
SubSystemTwo subSystemTwo;
public Facade(){
subSystemOne = new SubSystemOne();
subSystemTwo = new SubSystemTwo();
}
public void MethodA(){
subSystemOne.MethodOne();
subSystemTwo.MethodTwo();
}
}
客户类:
public class Main {
public static void main(String[] args) {
Facade facade = new Facade();
facade.MethodA();
}
}
"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2019.1.1\lib\idea_rt.jar=53762:D:\IntelliJ IDEA 2019.1.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\IDEAProject\out\production\IDEAProject" com.hnist.lzn.DesginModuel.Facede.Main
子系统一
子系统二方法
客户类根本不需要去了解关于子系统的细节,只要通过Facade类来间接调用即可。
使用时机:
- 设计初期,有意识将不同的层分离。类似三层架构,为复杂的子系统提供一个简单的接口,耦合度降低。
- 维护旧系统时,已经不能对旧的代码进行改动了。这个时候可以为新系统开发一个外观类,来提供一个接口,让新系统与Facade(外观类)交互,外观类与遗留代码打招呼。
- 当客户端与抽象类的 实现部分之间存在很大的依赖性时。