打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#设计模式之装饰者模式(Decorator Pattern)
java设计模式-Head First设计模式之Decorator模式 - java学习
鸭子类型: Duck Typing in Ruby | 天码营
Java设计模式之装饰模式趣谈
《Head First设计模式》阅读笔记.第三章
C#设计模式(9)——装饰者模式(Decorator Pattern)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服