为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式——外观模式

标签:
JavaScript

webp

facde


阅读原文请访问我的博客BrightLoong's Blog


一. 概述

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

外观模式通过向现有的系统添加一个接口,来隐藏系统的复杂性,用一个一致的界面来面向客户端。

外观模式是结构型设计模式。

其实外观模式在我们平时的开发中有意识或者是无意识的都有使用;比如WEB开发中我们会经常定义一个控制层(Controller),一个业务层(Service),一般来说业务层对控制层接收到的请求提供一个统一的接口来进行统一的处理,在业务层去实现各种不同的逻辑,这里的业务层就相当于一个外观类,它对客户端控制层来说屏蔽了复杂的实现。

二. UML类图

webp

facde

  • Facade:外观类,知道哪些子系统负责处理请求,将客户端请求代理给适当的子系统对象。

  • SubSystem:子系统,实现子系统功能,处理Facade对象指派的任务。

三. 源码实现

子系统1——SystemOne

package io.github.brightloong.lab.design.facade;/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */public class SystemOne {    public void start() {
        System.out.println("SystemOne start");
    }    public void shutdown() {
        System.out.println("SystemOne shutdown");
    }
}

子系统2——SystemTwo

package io.github.brightloong.lab.design.facade;/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */public class SystemTwo {    public void start() {
        System.out.println("SystemTwo start");
    }    public void shutdown() {
        System.out.println("SystemTwo shutdown");
    }
}

外观类——Facde

package io.github.brightloong.lab.design.facade;/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */public class Facde {    private SystemOne systemOne;    private SystemTwo systemTwo;    public Facde(SystemOne systemOne, SystemTwo systemTwo) {        this.systemOne = systemOne;        this.systemTwo = systemTwo;
    }    public void systemStart() {
        systemOne.start();
        systemTwo.start();
        System.out.println("System start");
    }    public void systemShutdown() {
        systemOne.shutdown();
        systemTwo.shutdown();
        System.out.println("System shutdown");
    }
}

客户端调用和输出

package io.github.brightloong.lab.design.facade;/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */public class Facde {    private SystemOne systemOne;    private SystemTwo systemTwo;    public Facde(SystemOne systemOne, SystemTwo systemTwo) {        this.systemOne = systemOne;        this.systemTwo = systemTwo;
    }    public void systemStart() {
        systemOne.start();
        systemTwo.start();
        System.out.println("System start");
    }    public void systemShutdown() {
        systemOne.shutdown();
        systemTwo.shutdown();
        System.out.println("System shutdown");
    }
}

输出结果如下:

SystemOne start
SystemTwo start
System start
========================
SystemOne shutdown
SystemTwo shutdown
System shutdown

四. 总结

使用场景

  • 为复杂的模块或子系统提供外界访问的模块

  • 子系统相互独立

优点

  • 松耦合

  • 更高的灵活性

  • 对于一些客户端来说,提供了安全性,因为封装了复杂的实现,而提供一个统一的接口,客户端不用关心内部的实现。



作者:BrightLoong
链接:https://www.jianshu.com/p/65a03e227902


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消