有一个积分礼物类:
/** 积分礼物 */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); }}
这个时候的类图就这样的:
联系客服