模式之外观模式

定义

提供一个高层次的接口,使得子系统更易于使用

使用场景

当你的程序有很多个模块,或者说子系统。你希望给用户提供一个统一的操作界面类,而不是让用户分别与这些模块交互。

一种设计是:给用户提供一套面板方用来法完成一般性的功能,如果面板提供的方法不能满足用户需求,用户还可以直接使用具体模块的功能来达到自己的目的。
另一种设计是:用户完全看不到各子模块,所有操作必须通过面板来完成,如果面板没有提供相应的功能,那也就gg了

实例

/**
 * 外观模式:提供一个高层次的接口,使得子系统更易于使用
 * 使用场景:
 *  当你的程序有很多个模块,或者说子系统,你希望给用户提供一个统一的操作界面类,而不是让用户分别与这些模块交互
 * @author
 * @date 2023/02/01 16:30
 **/
public class ReportFacade {
    public static void main(String[] args) {
        OrderSys orderSys = new OrderSys();
        PaymentSys paymentSys = new PaymentSys(orderSys);
        DeliverSys deliverSys = new DeliverSys();
        final String orderNum = orderSys.getOrderNum();
        System.out.println(String.format("\n报表\n------------------"+
                        "订单号:%s | 金额:%s元 | 配送耗时:%s分钟",
                orderNum,
                paymentSys.getOrderAccount(orderNum).toPlainString(),
                String.valueOf(deliverSys.getDeliverTime() / 60)));
    }
}
// 订单系统
class OrderSys{
    public String getOrderNum() {
        System.out.println("获取订单号");
        return "123456";
    }
}
// 支付系统
class PaymentSys {
    private OrderSys orderSys;
    public PaymentSys(OrderSys orderSys) {
        this.orderSys = orderSys;
    }
    public BigDecimal getOrderAccount(String orderNum){
        System.out.println(String.format("获取%s订单支付金额",orderNum));
        return BigDecimal.valueOf(500);
    }
}
// 物流系统
class DeliverSys {
    public int getDeliverTime() {
        System.out.println("获取配送耗时");
        return 30*60;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值