(部分内容有参考之嫌疑)
外观模式:
为子系统的各个类提供了一个简明一致的界面,它隐藏了子系统的复杂性,使得子系统更加容易被使用。
子系统(提供相关特征而紧密联系的一组类)
比如之前有人提过的例子,医院。
在医院这个子系统中,一个客户要去医院看病,需要经过挂号,门诊,开药,取药等过程。
那么多个客户去看病,在医院这个子系统中看来,会显得十分的麻烦。而解决的办法,就是提供一个接待员,这个接待员负责和医院的部门打交道,而你只负责把请求交给接待员。
模拟一个人去看病:
四个Module,代表一个医院的子系统
public class SubSystem1 {
public void guahao(){
System.out.println("负责挂号");
}
}
public class SubSystem2 {
public void menzhen(){
System.out.println("负责门诊");
}
}
public class SubSystem3 {
public void kaiyao(){
System.out.println("负责开药");
}
}
public class SubSystem4 {
public void quyao(){
System.out.println("负责取药");
}
}
为上面的子系统提供一个简明的接口,将客户与子系统分离。
public class Facade {
private SubSystem1 sub1;
private SubSystem2 sub2;
private SubSystem3 sub3;
private SubSystem4 sub4;
public Facade(){
sub1=new SubSystem1();
sub2=new SubSystem2();
sub3=new SubSystem3();
sub4=new SubSystem4();
}
public void kaibing(){
sub1.guahao();
sub2.menzhen();
sub3.kaiyao();
sub4.quyao();
}
}
客户端只需要考虑由外观提供的简易接口
public class Client {
public static void main(String[] args) {
Facade facade=new Facade();
facade.kaibing();
}
}
使用外观模式需要注意的点:
①不要在外观模式中增加额外的功能
②不能在外观模式中返回子系统的组件给客户,如果这样的话,应用不能从外观模式上获得最大的好处
③外观要提供高层次的接口,比如在医院这个例子中,高层次指的是和客户(病人)有关的内容。不需要在接口知道,和病人无关的子系统细节,比如,负责挂号的阿姨哪个漂亮,医生的开药处方是否潦草等。(当然这些细节,完全可以在子系统中各个类中私有。)