门面模式是对系统复杂的关系处理作了一个封装,对外提供一个简单的接口,成员介绍:html
场景:假设积分兑换物品流程,一共有三部分别依赖三个子系统
1.积分校验系统,查看是否有资格。
2.积分支付系统,兑换礼物,扣减积分等。
3.物流系统,兑换礼物后,进行配送流程。
/** * 礼物实体类 */ public class PointsGift { private String name; public PointsGift(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } /** * 支付子系统 */ public class PointsPaymentService { public boolean pay(PointsGift pointsGift) { //扣减积分 System.out.println("支付:" + pointsGift.getName() + " 积分红功!"); return true; } } /** * 积分校验子系统 */ public class QualifyService { public boolean isAvailable (PointsGift pointsGift) { System.out.println("校验" + pointsGift.getName() + "积分资格经过,库存经过"); return true; } } /** * 物流子系统 */ public class ShippingService { public String shipGift (PointsGift pointsGift) { //物流系统的对接逻辑 System.out.println(pointsGift.getName() + "进入物流系统"); return "666"; } } /** * 扣减积分门面类 */ public class GiftExchangeService { /** * 模拟注入 */ private QualifyService qualifyService = new QualifyService(); private PointsPaymentService pointsPaymentService = new PointsPaymentService(); private ShippingService shippingService = new 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("连衣裙"); GiftExchangeService giftExchangeService = new GiftExchangeService(); // giftExchangeService.setQualifyService(new QualifyService()); // giftExchangeService.setPointsPaymentService(new PointsPaymentService()); // giftExchangeService.setShippingService(new ShippingService()); giftExchangeService.giftExchange(pointsGift); } }
校验连衣裙积分资格经过,库存经过 支付:连衣裙 积分红功! 连衣裙进入物流系统 物流订单号:666
外观模式和中介者模式java
外观模式和单例模式git
外观模式和抽象工厂模式github
门面模式
: https://github.com/sigmako/design-pattern/tree/master/facade设计模式