• java设计模式(六)——门面模式


    1、基本概念

    门面模式又称为外观模式,提供统一的接口,来访问子系统的一系列接口,属于结构型模式

    是一种很常见的设计模式,比如:我们经常用的controller,一个客户下单,它去调用订单接口,订单接口里面

    可能会去调用积分系统,支付系统,优惠券系统等的接口,这样客户端就不必多求次发起请求

    2、案例

    案例:一个订单下单,先去判断是否有优惠券,判断是否支付成功,最后加积分。

     门面角色:

    public class OrderServiceFacade {
        private  CouponService couponService = new CouponService();
        private IntegralService integralService = new IntegralService();
        private PaymentService paymentService = new PaymentService();
    
        public String placeOrder(OrderInfo orderInfo){
            if(couponService.isHaveCoupon(orderInfo)){
                    if(paymentService.isSuccessPay(orderInfo)){
                        integralService.addIntegral(orderInfo);
                    }else{
                        return "我太穷了^^";
                    }
            }else{
                return "太贵了买不起";
            }
            return orderInfo.getName()+"就是好";
        }
    }

    子系统角色:CouponService 

    public class CouponService {
    
        public boolean isHaveCoupon(OrderInfo orderInfo){
            System.out.println("商品:"+orderInfo.getName()+",价格:"+orderInfo.getPrice()+",有优惠券30块");
            return true;
        }
    }

    子系统角色:PaymentService

    public class PaymentService {
    
        public boolean isSuccessPay(OrderInfo orderInfo){
            System.out.println("商品:"+orderInfo.getName()+",价格:"+orderInfo.getPrice()+",已成功支付");
            return  true;
        }
    }

    子系统角色:IntegralService

    public class IntegralService {
    
        public void addIntegral(OrderInfo orderInfo){
            System.out.println("商品:"+orderInfo.getName()+",价格:"+orderInfo.getPrice()+",支付成功,添加积分99");
        }
    }

    测试类:

    public class Test {
    
        public static void main(String[] args) {
    
            OrderServiceFacade orderServiceFacade = new OrderServiceFacade();
            OrderInfo orderInfo = new OrderInfo("霸王洗发水",99.9);
            orderServiceFacade.placeOrder(orderInfo);
        }
    }

    输出:

    商品:霸王洗发水,价格:99.9,有优惠券30块
    商品:霸王洗发水,价格:99.9,已成功支付
    商品:霸王洗发水,价格:99.9,支付成功,添加积分99

    我们常用的utils工具类,有时候就是一种门面模式

    3、优缺点

    门面模式的优点:

    1、简化接口调用,不必一个接口一个接口的调用

    2、符合迪米特法则,最少知道原则,调用接口只提供一个外在接口

    3、减少系统依赖

    缺点:

    1、不符合开闭原则,当我们需要新增一个接口时,需要修改门面角色里面的代码

    例如,我们需要增加物流系统,那么就要在支付成功后,加一段物流的业务代码。

    2、子系统扩展可能会带来危险,例如积分系统无法使用,可能导致订单的失败等等

  • 相关阅读:
    sql server 报表允许用windows 身份登录的任何人进入
    缩小sql server 日志文件
    IIS Internal Server Error &IIS8中部署WCF服务出错:HTTP 错误 404.3
    less 学习
    访问Index function 两次
    欢迎访问我的个人网站!
    我的web小游戏【持续更新中】
    排序算法(C#)
    存储过程详解
    C#集合
  • 原文地址:https://www.cnblogs.com/tdyang/p/13259448.html
Copyright © 2020-2023  润新知