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

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

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

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

这里写图片描述

模拟一个人去看病:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值