外观模式
主要的目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单得使用子系统,他负责把客服端的请求转发给子系统内部的各个模块进行处理.
使用场景
- 当你要为一个复杂的子系统提供一个简单的接口时。
- 客户程序与抽象类的实现部分之间存在着很大的依赖性.
- 当你需要构建一个层次接口的子系统时
案例代码:
//模块一
public class ModuleA {
public void testA(){
System.out.println("this is module A");
}
}
//模块二
public class ModuleB {
public void testB(){
System.out.println("this is module B");
}
}
//模块三
public class ModuleC {
public void testC(){
System.out.println("this is module C");
}
}
外观类
public class Facade {
private ModuleA moduleA = null;
private ModuleB moduleB = null;
private ModuleC moduleC = null;
private static Facade mFacade = null;
private Facade() {
moduleA = new ModuleA();
moduleB = new ModuleB();
moduleC = new ModuleC();
}
public static Facade getInstance() {
if (mFacade == null) {
mFacade = new Facade();
}
return mFacade;
}
public void testOperation() {
moduleA.testA();
moduleB.testB();
moduleC.testC();
}
}
测试用例:
public static void main(String[] args) {
Facade.getInstance().testOperation();
}
优点
- Facade类封装了各个模块交互的过程,如果今后内部模块调用关系发生了变化,只需要修改Facade就实现就ok了.
- Facade实现时可以被多个客户端调用的。‘
在Android中运用
contextImpl是android中的外观类
Facade01.png Facade02.png Facade03.png Facade04.png Facade05.png Facade06.png Facade07.png
网友评论