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

(部分内容有参考之嫌疑)
外观模式
为子系统的各个类提供了一个简明一致的界面,它隐藏了子系统的复杂性,使得子系统更加容易被使用。
子系统(提供相关特征而紧密联系的一组类)

比如之前有人提过的例子,医院。
在医院这个子系统中,一个客户要去医院看病,需要经过挂号,门诊,开药,取药等过程。

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

<<大话设计模式>>之外观模式_第1张图片

模拟一个人去看病:

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

使用外观模式需要注意的点:
①不要在外观模式中增加额外的功能
②不能在外观模式中返回子系统的组件给客户,如果这样的话,应用不能从外观模式上获得最大的好处
③外观要提供高层次的接口,比如在医院这个例子中,高层次指的是和客户(病人)有关的内容。不需要在接口知道,和病人无关的子系统细节,比如,负责挂号的阿姨哪个漂亮,医生的开药处方是否潦草等。(当然这些细节,完全可以在子系统中各个类中私有。)

你可能感兴趣的:(设计模式)