美文网首页
外观模式

外观模式

作者: nieniemin | 来源:发表于2020-06-22 22:48 被阅读0次

什么是外观模式

Facade 又叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

模式角色

子系统角色:(Subsystem)可以是一个也可以是多个,子系统是分化的不同的处理模块,不是单独的类。

外观角色:(Facade:)了解子系统所有的方法和任务,此角色有自己的方法,client通过此角色方法来调用子系统的功能。

UML类图

外观模式

代码实现

假设我们自己去医院看病需要这样的几个系统
1.选择一个医生(CardPhysician);
2.去医院挂号(Register)
3.分诊台分诊(Triage)
最后我们才能看病.
但如果我们这个时候有就诊渠道(VIPFacade),直接就省略了访问1,2,3这几个系统的步骤。通过VIPFacade来完成看病。

public class CardPhysician {

    public void cardPhysician(String pcp) {
        System.out.println("选择了一个"+ pcp);
    }

}
public class Register {

    public void register() {
        System.out.println("挂号交钱");
    }
}
public class Triage {

    public void triage() {
        System.out.println("分诊台分诊等待就医.");
    }
}
public class VIPFacade {

    private CardPhysician cardPhysician;
    private Register register;
    private Triage triage;

    public VIPFacade() {
        cardPhysician = new CardPhysician();
        register = new Register();
        triage = new Triage();
    }

    public void vipService(String pcp) {
        cardPhysician.cardPhysician(pcp);
        register.register();
        triage.triage();
    };

}
public class Client {

    public static void main(String[] args) {
      //*******************直接调用**********************
        CardPhysician cardPhysician = new CardPhysician();
        cardPhysician.cardPhysician("内科医生");

        Register register = new Register();
        register.register();

        Triage triage = new Triage();
        triage.triage();

        //*******************外观模式**********************
        VIPFacade vipFacade = new VIPFacade();
        vipFacade.vipService("外科医生");

    }
}

优点
简化了调用过程,无须了解、深入子系统,防止带来风险
减少系统依赖、松散耦合
更好的划分访问层次
符合迪米特法则,即最少知道原则

缺点
增加子系统、扩展子系统行为容易引入风险
不符合开闭原则
外观模式完整代码

相关文章

网友评论

      本文标题:外观模式

      本文链接:https://www.haomeiwen.com/subject/sslatktx.html