zoukankan      html  css  js  c++  java
  • 设计模式之门面模式(外观模式)

    门面模式(Facade),别名"外观模式",门面模式为子系统中的一组接口提供了一致的门面(也就是软件的入口),此模式定义了一个高层接口,这个接口使得这一个子系统更加容易使用.

    门面模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用者只需跟这个接口发生调用,而无需关心这个子系统的内部细节.

    角色:

      Facade(门面类):为调用者提供统一的调用接口,门面类知道哪些子系统负责处理请求并完成相关的请求处理,从而将调用者的请求转交给适当子系统对象去完成.

      Client(调用者):门面模式的调用者

      SubSystemList:(子系统的集合)也就是门面接口实现类的成员变量:指模块或者子系统,去实际处理Facade对象指派的任务,功能的实际提供者

    Demo案例:

      假设现有一个病人去医院看病,需要完成四项功能  挂号 门诊 划价 取药,如果病人单独去完成这些,需要四个步骤,过于繁琐,我们可以通过门面模式去实现病人和四个部分的解耦合

     SubSystemList:(子系统的集合) 

    public class Register {
    
        public void register() {
            System.out.println("挂号完成");
        }
    }
    public class OutpatientDepartment {
    
        public void check() {
            System.out.println("门诊完毕");
        }
    }
    public class Pricing {
    
        public void pricing() {
            System.out.println("划价完毕");
        }
    }
    public class Pharmacy {
    
        public void takeMedicine() {
            System.out.println("取药完毕");
        }
    }

    Facade(门面类)

    public class Facade {
        //示意方法,满足客户端需要的功能
        public void service(){
            Register a = new Register();
            a.register();
            OutpatientDepartment b = new OutpatientDepartment();
            b.check();
            Pricing c = new Pricing();
            c.pricing();
            Pharmacy d = new Pharmacy();
            d.takeMedicine();
        }
    }

    Client(调用者)

    public class Client {
     
        public static void main(String[] args) {
            
            Facade facade = new Facade();
            facade.service();
        }
     
    }

    此刻就是一个简单的门面模式,无需知道子系统集合的具体实现细节,只需调用门面类去完成所需功能即可,提供一个统一门面.

    总结:

      1.门面模式对外屏蔽了子系统的细节,因此门面模式降低了客户端对子系统使用的复杂性

      2.门面模式对客户端与子系统的直接耦合关系进行了解耦,让子系统内部的模块更易于维护和扩展.

      3:通过合理的使用门面模式,可以帮助我们更好的划分访问的层次,形成合理的层次结构,特别是在分层模块化架构的时候,就应该使用门面模式

      4:在维护一个遗留的大型系统是,可能这个系统已经变得非常难以维护和扩展,可以考虑为新系统开发一个Facade类,来提供遗留系统的比较清晰简单的接口,让新系统与Facade类交互,提高代码复用性,

      5.不能过度使用门面模式,需要合理设计

      6.门面模式将具体细节和调用者分离,调用者不关心内部细节实现方式,遵守迪米特法则,调用者尽可能少的知道实现功能的内部实现细节

  • 相关阅读:
    好文章集合
    WPF:布局
    xcode6.0 模拟器打不开
    vue-vux初学
    【个人笔记】《知了堂》MySQL三种关系:一对一,一对多,多对多。
    vue-axios跨域配置
    vue+webpack使用
    vs code插件
    echarts图表属性设置
    【个人笔记】《知了堂》ajax的get及post请求
  • 原文地址:https://www.cnblogs.com/zhaoletian/p/12842985.html
Copyright © 2011-2022 走看看