java设计模式精讲 Debug 方式+内存分析 第10章 外观模式

10-1 外观模式讲解

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


11-2 装饰者模式coding

有一个积分礼物类:

/** 积分礼物 */
public class PointsGift {
    private String name;

    public PointsGift(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

校验类:是否有资格

public class QualifyService {
    public boolean isAvailable(PointsGift pointsGift) {
        System.out.println("校验"+pointsGift.getName()+"积分资格通过,库存通过");
        return true;
    }
}

积分支付类:

public class PointsPaymentService {
    public boolean pay(PointsGift pointsGift) {
        /** 扣减积分 */
        System.out.println("支付"+pointsGift.getName()+" 积分成功");
        return true;
    }
}

还要一个物流子系统:

public class ShippingService {
    public String shipGift(PointsGift pointsGift) {
        /** 物流系统对接逻辑 */
        System.out.println(pointsGift.getName() + "进入物流系统");
        String shippingOrderNo = "666";
        return shippingOrderNo;
    }
}

积分交换交易:

public class GiftExchangeService {
    private QualifyService qualifyService;
    private PointsPaymentService pointsPaymentService;
    private ShippingService shippingService;

    public void setQualifyService(QualifyService qualifyService) {
        this.qualifyService = qualifyService;
    }

    public void setPointsPaymentService(PointsPaymentService pointsPaymentService) {
        this.pointsPaymentService = pointsPaymentService;
    }

    public void setShippingService(ShippingService shippingService) {
        this.shippingService = shippingService;
    }

    public void giftExchange(PointsGift pointsGift) {
        if (qualifyService.isAvailable(pointsGift)) {
            /** 资格检验通过 */
            if (pointsPaymentService.pay(pointsGift)) {
                //如果积分支付成功,那么就是可以返回订单号了
                String shippingOrderNo = shippingService.shipGift(pointsGift);
                System.out.println("物流订单系统下单成功,订单号是:"+shippingOrderNo);
            }
        }
    }
}

这个就是外观模式的类图:
在这里插入图片描述


测试代码:

public class Test {
    public static void main(String[]args){
        PointsGift pointsGift = new PointsGift("T恤");
        GiftExchangeService giftExchangeService = new GiftExchangeService();

        giftExchangeService.setQualifyService(new QualifyService());
        giftExchangeService.setPointsPaymentService(new PointsPaymentService());
        giftExchangeService.setShippingService(new ShippingService());

        giftExchangeService.giftExchange(pointsGift);
    }
}

运行结果:

校验T恤积分资格通过,库存通过
支付T恤 积分成功
T恤进入物流系统
物流订单系统下单成功,订单号是:666


这个就是现在的类图:
在这里插入图片描述


这里和子系统有关联关系是因为没有集成Spring,我们可以模拟一下,在外观类里面直接new出实例:

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.isAvailable(pointsGift)) {
            /** 资格检验通过 */
            if (pointsPaymentService.pay(pointsGift)) {
                //如果积分支付成功,那么就是可以返回订单号了
                String shippingOrderNo = shippingService.shipGift(pointsGift);
                System.out.println("物流订单系统下单成功,订单号是:"+shippingOrderNo);
            }
        }
    }
}

测试类:

public class Test {
    public static void main(String[]args){
        PointsGift pointsGift = new PointsGift("T恤");
        GiftExchangeService giftExchangeService = new GiftExchangeService();
        giftExchangeService.giftExchange(pointsGift);
    }
}

这个时候的类图就这样的:
在这里插入图片描述
我们还可以用抽象外观类来实现;


11-3 装饰者模式源码解析(spring-session mybatis jdk servlet)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37778801/article/details/84502343
今日推荐