设计模式:外观模式

2019-08-01  本文已影响0人  谁家的猪

定义与类型

适用场景

优点

缺点

相关设计模式

代码演示

实现一个积分换购礼物的功能,需要包含3个功能:资格校验,积分支付,物流配送。

  1. 创建PointsGift类
import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 积分礼物
 * @author lijiayin
 */
@Data
@AllArgsConstructor
public class PointsGift {
    private String name;
}
  1. 实现资格校验子系统
/**
 * 校验是否有资格换取礼物
 * @author lijiayin
 */
public class QualifyService {
    public boolean isAvaliable(PointsGift pointsGift){
        System.out.println("校验" + pointsGift.getName() + "积分资格通过,库存通过!");
        return true;
    }
}
  1. 实现积分支付子系统
/**
 * 支付积分
 * @author lijiayin
 */
public class PointsPaymentService {
    public boolean pay(PointsGift pointsGift){
        //扣减积分
        System.out.println("支付" + pointsGift.getName() + "积分成功");
        return true;
    }
}
  1. 实现物流配送子系统
/**
 * 物流配送
 * @author lijiayin
 */
public class ShippingService {
    public String shipGift(PointsGift pointsGift){
        //物流系统对接
        System.out.println(pointsGift.getName() + "进入物流系统");
        String shippingOrderNo = "666";
        return shippingOrderNo;
    }
}
  1. 创建一个“外观(面子)”
    由这个类暴露给外部,它定义并实现了积分兑换的流程。
/**
 * 积分兑换礼物系统
 * @author lijiayin
 */
public class GiftExchangeService {
    private QualifyService qualifyService = new QualifyService();
    private PointsPaymentService pointsPaymentService = new PointsPaymentService();
    private ShippingService shippingService = new ShippingService();
    
    public void giftExchange(PointsGift pointsGift){
        if(qualifyService.isAvaliable(pointsGift)){
            //资格校验通过
            if(pointsPaymentService.pay(pointsGift)){
                //支付成功
                String shippingOrderNo = shippingService.shipGift(pointsGift);
                System.out.println("物流系统下单成功,运单号:" + shippingOrderNo);
            }
        }
    }
}
  1. 创建测试类
/**
 * @author lijiayin
 */
public class Test {
    public static void main(String[] args) {
        PointsGift pointsGift = new PointsGift("小猪佩奇");
        GiftExchangeService giftExchangeService = new GiftExchangeService();
        giftExchangeService.giftExchange(pointsGift);
    }
}
  1. 测试结果


    测试结果.png
  2. UML图


    UML.png

框架源码示例

  1. Spring的JdbcUtils,封装了jdbc
  2. tomcat的RequestFacade和ResponseFacade
上一篇 下一篇

猜你喜欢

热点阅读