意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。 何时使用:
1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个”接待员”即可。 2、定义系统的入口。
如何解决:客户端不与系统耦合,外观类与系统耦合。 关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
应用实例:
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。 何时使用:
1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个”接待员”即可。 2、定义系统的入口。
如何解决:客户端不与系统耦合,外观类与系统耦合。 关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
应用实例:
1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
案例
已知,去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便
子模块
这里,我们定义了ABCD四个类,分别代表去医院看病的四个步骤,挂号、门诊、划价、取药。
public class A {
public void guahao() {
System.out.println("挂号");
}
}
public class B {
public void mengzheng() {
System.out.println("门诊");
}
}
public class C {
public void huajia() {
System.out.println("划价");
}
}
public class D {
public void quyao() {
System.out.println("取药");
}
}
facade
这里,我们定义了Facade类代表了医院的接待人员,他会替我们完成挂号、门诊、划价、取药的操作。
public class Facade {
private A a;
private B b;
private C c;
private D d;
public Facade() {
a = new A();
b = new B();
c = new C();
d = new D();
}
public void treat() {
a.guahao();
b.mengzheng();
c.huajia();
d.quyao();
}
}
测试类
public class Test {
public static void main(String[] args) {
Facade facade = new Facade();
facade.treat();
}
}