外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式结构图
四个子系统类:
public class SubSystemOne {
public void MethodOne() {
System.out.println("子系统方法一");
}
}
public class SubSystemTwo {
public void MethodTwo() {
System.out.println("子系统方法二");
}
}
public class SubSystemThree {
public void MethodThree() {
System.out.println("子系统方法三");
}
}
public class SubSystemFour {
public void MethodFour() {
System.out.println("子系统方法四");
}
}
外观类:
public class Facade {
private SubSystemOne one;
private SubSystemTwo two;
private SubSystemThree three;
private SubSystemFour four;
public Facade() {
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
public void MethodA() {
System.out.println("方法组A");
one.MethodOne();
two.MethodTwo();
four.MethodFour();
}
public void MethodB() {
System.out.println("方法组B");
two.MethodTwo();
three.MethodThree();
}
}
客户端调用:
public static void main(String[] args) {
// TODO Auto-generated method stub
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
}
何时使用外观模式
- 在设计初期,应该有意识的将不同的两个层分离,层与层之间建立外观 Facade 类,这样可以为复杂的子系统提供一个简单的接口,使耦合降低。
- 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观 Facade 类可以提供一个简单的接口,减少它们之间的依赖。
- 在维护遗留的大型系统时,可以为新系统开发一个外观 Facade 类,让新系统与 Facade 对象交互,Facade 与遗留代码交互复杂的工作。