zoukankan      html  css  js  c++  java
  • 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、子系统扩展可能会带来危险,例如积分系统无法使用,可能导致订单的失败等等

  • 相关阅读:
    使用不同方法输出一维整型数组a的各元素
    从键盘输入一个字符串与一个指定字符,将字符串中出现的指定字符全部删除
    指向函数的指针
    输入一个十进制正整数,将其转换成二进制、八进制、十六进制数输出
    java速成一篇博文搞定基础
    倒排索引lucene
    Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
    C++对象内存布局2进阶篇C++ 对象的内存布局(下)
    笔试面试设计模式&软件测试&软件工程
    字典树
  • 原文地址:https://www.cnblogs.com/tdyang/p/13259448.html
Copyright © 2011-2022 走看看