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

  • 相关阅读:
    看看别人实现的投影触控技术
    SharePoint (MOSS2007) 中 实现Form 验证全部(转载)
    XPath简明教程
    做人,做事,做架构师 转载 潘爱民 文章
    Java不适合于作为主要编程教学语言 孟岩
    KenaBoy的provider模式(转载)
    愚老先生的 WSS3.0 Lists服务的使用方法,帮了大忙
    Provider模式(转载)
    没有配置aspnetdb的情况下Membership的默认存储方式
    【ASP.NET开发】.NET三层架构简单解析 分类: ASP.NET 20130116 18:05 1568人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/tdyang/p/13259448.html
Copyright © 2011-2022 走看看