针对问题:在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。 那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?
为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。——Gang of Four
外观模式结构图:
外观模式实现代码:
/**
* 实例A
* @author bruce
*
*/
public class A {
public void methodA(){
System.out.println("A doing something");
}
}
/**
* 实例B
* @author bruce
*
*/
public class B {
public void methodB(){
System.out.println("B doing something");
}
}
/**
* 实例C
* @author bruce
*
*/
public class C {
public void methodC(){
System.out.println("C doing something");
}
}
/**
* 外观实例
* @author bruce
*
*/
public class Facade {
private A a;
private B b;
private C c;
public Facade(A a,B b,C c){
this.a=a;
this.b=b;
this.c=c;
}
/**
* 外观接口
*/
public void action(){
a.methodA();
b.methodB();
c.methodC();
//.......
}
}
/**
* 测试
* @author bruce
*
*/
public class Client {
public static void main(String[] args) {
A a=new A();
B b=new B();
C c=new C();
Facade facade=new Facade(a,b,c);
facade.action();
/**
* output:
A doing something
B doing something
C doing something
*/
}
}