您的位置:首页 > 其它

<<大话设计模式>>之外观模式

2016-05-04 09:30 465 查看
(部分内容有参考之嫌疑)

外观模式

为子系统的各个类提供了一个简明一致的界面,它隐藏了子系统的复杂性,使得子系统更加容易被使用。

子系统(提供相关特征而紧密联系的一组类)

比如之前有人提过的例子,医院。

在医院这个子系统中,一个客户要去医院看病,需要经过挂号,门诊,开药,取药等过程。

那么多个客户去看病,在医院这个子系统中看来,会显得十分的麻烦。而解决的办法,就是提供一个接待员,这个接待员负责和医院的部门打交道,而你只负责把请求交给接待员。



模拟一个人去看病:

四个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();
}
}


使用外观模式需要注意的点:

①不要在外观模式中增加额外的功能

②不能在外观模式中返回子系统的组件给客户,如果这样的话,应用不能从外观模式上获得最大的好处

③外观要提供高层次的接口,比如在医院这个例子中,高层次指的是和客户(病人)有关的内容。不需要在接口知道,和病人无关的子系统细节,比如,负责挂号的阿姨哪个漂亮,医生的开药处方是否潦草等。(当然这些细节,完全可以在子系统中各个类中私有。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: