九、门面模式——我是大管家,找我就行了。


设计模式是面向问题、场景而总结产生的设计思路。是解决问题的套路。23 种经典的设计模式。它们又可以分为三大类:创建型、结构型、行为型。

结构型 包含了 代理模式、 桥接模式、 装饰器模式、适配器模式、门面模式、组合模式、 享元模式。

门面模式

门面模式(Facade Design Pattern)又称为外观模式。
当子系统越来越复杂,增加外观模式提供了一个统一的接口,用来访问子系统中的一群接口。适用于构建多层系统结构,利用外观对象作为每层的入口,简化层间调用。通俗的说, 就是设计一个类,专门用于对外服务的, 门面对象是外界访问子系统内部的专用通道。
通过门面模式,简化了调用过程,无需了解深入子系统,防止带来风险。减少系统依赖、松散耦合,更好的划分访问层次,符合迪米特法则,即最少知道原则。

1.子系统

假设有三个子系统,各自负责写库、通知、日志,如果将这些细节接口暴露给客户端,会给客户端的调用逻辑带来复杂性和出错风险。

public class SubSystem1 {
    public boolean dbtransaction() {
        System.out.println("做一些数据库事务");
        return true;
    }
}

public class SubSystem2 {
    public void notification() {
        System.out.println("做一些消息通知");
    }
}

public class SubSystem3 {
    public void log() {
        System.out.println("做一些消息日志处理");
    }
}

2. 大管家

大管家统一提供一个简单接口,封装了处理逻辑,简化了接口服务的调用。

public class FacadeService {
    private SubSystem1 system1 = new SubSystem1();
    private SubSystem2 system2 =  new SubSystem2();
    private SubSystem3 system3 = new SubSystem3();

    public void apply() {
        system3.log();
        boolean success = system1.dbtransaction();
        if(success)
            system2.notification();
    }
}

3. 组合在一起

将这些服务提供在一起后客户端的调用更简单,也不必知道内部接口的细节。

public class Main {
    public static void main(String[] args) {
        FacadeService service = new FacadeService();
        service.apply();
    }
}

运行结果:

做一些消息日志处理
做一些数据库事务
做一些消息通知

总结

门面模式提供了统一调用接口,就像一个大管家提供了一站式服务。门面模式可以解决接口调用易用性的问题、减轻客户端多次调用接口所带来的的性能问题、以及解决分布式事务——将多个事务整合在一起。

设计模式系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/designpattern
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值