Java设计模式之结构型模式 | 外观模式

38 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情

觉得对你有益的小伙伴记得点个赞+关注

后续完整内容持续更新中

希望一起交流的欢迎发邮件至javalyhn@163.com

1. 外观模式定义

要求一个子系统的外观与其内部的通信必须通过一个统一的对象进行。

2. 外观模式的角色

  • Facade: 门面角色
  • subsystem: 子系统角色

3. 外观模式使用场景

  1. 为一个复杂的模块或者子系统提供一个供外界访问的接口
  2. 子系统相对独立---外界对子系统的访问只需要黑箱操作即可
  3. 预防低水平人员带来的风险扩散

4. 外观模式的实现

给定以下微信自助程序的情景 image.png

WeiXinFacade

public class WeiXinFacade {

    Police police = new Police();
    Edu edu = new Edu();
    Social social = new Social();


    /**
     * 封装起来只留一个方法
     * @param name
     */
    public void handleXxx(String name){
        police.resgister(name);
        edu.assignSchool(name);
        social.handleSocial(name);
    }

    public void resgister(String name){
        police.resgister(name);
    }
    public void assignSchool(String name){
        edu.assignSchool(name);
    }

}

Edu

public class Edu {

    public void assignSchool(String name){
        System.out.println(name+",你的孩子明天去 大学附属幼儿园 报道......");
    }
}

Police

public class Police {

    public void resgister(String name){
        System.out.println(name + "已办理落户");
    }
}

Social

public class Social {

    public void handleSocial(String name){
        System.out.println(name+",你的社保关系已经转移....");
    }
}
/**
 * 需求:来回跑太麻烦,按照最少知道原则,我就想和一个部门进行交互。
 *
 *
 *
 */
public class MainTest {

    public static void main(String[] args) {

//        Police police = new Police();
//        police.resgister("");
//
//        Edu edu = new Edu();
//        edu.assignSchool("");
//
//        Social social = new Social();
//        social.handleSocial("");

        WeiXinFacade facade = new WeiXinFacade();

        facade.handleXxx("LYHN");
//
//        facade.resgister("");
//        facade.assignSchool("");

    }
}

image.png

5. 外观模式优点

  1. 减少系统相互依赖
  2. 提高了灵活性
  3. 提高了安全性