From 91cceedf266500e7840c060f2809b54102c40d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Fri, 28 Feb 2020 11:21:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=96=E8=A7=82=E6=A8=A1=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E9=80=A0=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/GiftExchangeService.java | 49 +++++++++++++++++++ .../pattern/structural/facade/PointGift.java | 17 +++++++ .../facade/PointPaymentService.java | 19 +++++++ .../structural/facade/QualifyService.java | 24 +++++++++ .../structural/facade/ShippingService.java | 25 ++++++++++ .../{before => }/BattercakeTest.java | 4 +- .../facade/GiftExchangeServiceTest.java | 24 +++++++++ 7 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeService.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointGift.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointPaymentService.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/facade/QualifyService.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/facade/ShippingService.java rename src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/{before => }/BattercakeTest.java (92%) create mode 100644 src/test/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeServiceTest.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeService.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeService.java new file mode 100644 index 0000000..fba27f2 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeService.java @@ -0,0 +1,49 @@ +package top.fjy8018.designpattern.pattern.structural.facade; + +import lombok.extern.slf4j.Slf4j; + +/** + * 外观类——礼物兑换逻辑 + *

+ * 该服务定义了与各个子系统交互的逻辑,业务系统无需知道与内部子系统的交互逻辑,符合迪米特法则 + * + * @author F嘉阳 + * @date 2020/2/28 10:44 + */ +@Slf4j +public class GiftExchangeService { + + private PointPaymentService pointPaymentService; + + private QualifyService qualifyService; + + private ShippingService shippingService; + + public void setPointPaymentService(PointPaymentService pointPaymentService) { + this.pointPaymentService = pointPaymentService; + } + + public void setQualifyService(QualifyService qualifyService) { + this.qualifyService = qualifyService; + } + + public void setShippingService(ShippingService shippingService) { + this.shippingService = shippingService; + } + + /** + * 系统交互逻辑 + * + * @param pointGift + */ + public void giftExchange(PointGift pointGift) { + if (qualifyService.isAvalible(pointGift)) { + // 资格校验通过 + if (pointPaymentService.pay(pointGift)) { + // 如果积分支付成功 + String shippingOrderNo = shippingService.shipGift(pointGift); + log.info("物流系统下单成功,订单号为{}", shippingOrderNo); + } + } + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointGift.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointGift.java new file mode 100644 index 0000000..1c2da89 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointGift.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.structural.facade; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 外观模式又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口 + * 积分礼物 + * + * @author F嘉阳 + * @date 2020/2/28 10:33 + */ +@Getter +@AllArgsConstructor +public class PointGift { + private String name; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointPaymentService.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointPaymentService.java new file mode 100644 index 0000000..129106e --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/PointPaymentService.java @@ -0,0 +1,19 @@ +package top.fjy8018.designpattern.pattern.structural.facade; + +import lombok.extern.slf4j.Slf4j; + +/** + * 积分支付校验子系统 + * + * @author F嘉阳 + * @date 2020/2/28 10:37 + */ +@Slf4j +public class PointPaymentService { + + public boolean pay(PointGift pointGift) { + // 扣减积分逻辑 + log.info("支付礼物 {} 积分成功", pointGift.getName()); + return true; + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/QualifyService.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/QualifyService.java new file mode 100644 index 0000000..3e16cef --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/QualifyService.java @@ -0,0 +1,24 @@ +package top.fjy8018.designpattern.pattern.structural.facade; + +import lombok.extern.slf4j.Slf4j; + +/** + * 积分校验子系统 + * + * @author F嘉阳 + * @date 2020/2/28 10:34 + */ +@Slf4j +public class QualifyService { + + /** + * 模拟积分校验逻辑 + * + * @param pointGift + * @return + */ + public boolean isAvalible(PointGift pointGift) { + log.info("校验礼物 {} 通过,积分校验通过,库存通过", pointGift.getName()); + return true; + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/ShippingService.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/ShippingService.java new file mode 100644 index 0000000..6ad9976 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/facade/ShippingService.java @@ -0,0 +1,25 @@ +package top.fjy8018.designpattern.pattern.structural.facade; + +import lombok.extern.slf4j.Slf4j; + +/** + * 物流子系统 + * + * @author F嘉阳 + * @date 2020/2/28 10:39 + */ +@Slf4j +public class ShippingService { + + /** + * 返回物流运单号 + * + * @param pointGift + * @return + */ + public String shipGift(PointGift pointGift) { + // 物流系统对接逻辑 + log.info("礼物 {} 进入物流系统", pointGift.getName()); + return "123456"; + } +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/before/BattercakeTest.java b/src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/BattercakeTest.java similarity index 92% rename from src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/before/BattercakeTest.java rename to src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/BattercakeTest.java index 08fb68b..8de1010 100644 --- a/src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/before/BattercakeTest.java +++ b/src/test/java/top/fjy8018/designpattern/pattern/structural/decorator/BattercakeTest.java @@ -1,4 +1,4 @@ -package top.fjy8018.designpattern.pattern.structural.decorator.before; +package top.fjy8018.designpattern.pattern.structural.decorator; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -7,8 +7,6 @@ import top.fjy8018.designpattern.pattern.structural.decorator.after.AbstractBatt import top.fjy8018.designpattern.pattern.structural.decorator.after.EggBattercake; import top.fjy8018.designpattern.pattern.structural.decorator.after.SausageBattercake; -import static org.junit.jupiter.api.Assertions.*; - @Slf4j class BattercakeTest { diff --git a/src/test/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeServiceTest.java b/src/test/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeServiceTest.java new file mode 100644 index 0000000..c1ed26c --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/structural/facade/GiftExchangeServiceTest.java @@ -0,0 +1,24 @@ +package top.fjy8018.designpattern.pattern.structural.facade; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +/** + * @author F嘉阳 + * @date 2020/2/28 10:53 + */ +@Slf4j +class GiftExchangeServiceTest { + + @Test + void giftExchange() { + PointGift pointGift = new PointGift("手环"); + // 注入服务 + GiftExchangeService exchangeService = new GiftExchangeService(); + exchangeService.setPointPaymentService(new PointPaymentService()); + exchangeService.setQualifyService(new QualifyService()); + exchangeService.setShippingService(new ShippingService()); + // 兑换 + exchangeService.giftExchange(pointGift); + } +} \ No newline at end of file