(六)Java架构师成长之路-设计模式:门面模式

一.定义

创建一个接口来调用其他系统的服务,而不是直接使用客户端调用。

属于结构型模式

二.代码

以生活中在网上购买商品为例

新建库存服务类

public class StockService {

    public boolean deduct() {
        System.out.println("库存扣减成功...");
        return true;
    }
}

支付服务

public class PaymentService {

    public boolean pay() {
        System.out.println("支付成功...");
        return true;
    }
}

物流服务

public class LogisticsService {

    public void enter() {
        System.out.println("进入物流系统,物流单号123456");
    }
}

简单起见我们就写这三个服务

下面我们来写一个门面类

public class FacadeService {

    StockService stockService = new StockService();
    PaymentService paymentService = new PaymentService();
    LogisticsService logisticsService = new LogisticsService();

    public void order() {
        System.out.println("流程开始...");
        paymentService.pay();
        stockService.deduct();
        logisticsService.enter();
        System.out.println("物流运输中...");
    }
}

客户端调用,我们的客户端调用的时候只需要调用门面服务类的一个接口

public class Test {

    public static void main(String[] args) {
        FacadeService facadeService = new FacadeService();
        facadeService.order();
    }
}

输出结果

看到这里,可能有人会说,你这不是静态代理模式吗?对,门面模式就是一种特殊的静态代理模式。那它和静态代理有什么区别呢?

门面模式强调封装,而静态代理强调增强。

三.门面模式在源码中的应用

JdbcUtils、Configuration

四.门面模式的优缺点

优点:符合迪米特法则,降低了子系统的风险

缺点:不符合开闭原则,当子系统扩展时,可能需要修改门面类

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值