外观模式,改造前

This commit is contained in:
2020-02-28 11:21:33 +08:00
parent 6ba2796789
commit 91cceedf26
7 changed files with 159 additions and 3 deletions

View File

@@ -0,0 +1,49 @@
package top.fjy8018.designpattern.pattern.structural.facade;
import lombok.extern.slf4j.Slf4j;
/**
* 外观类——礼物兑换逻辑
* <p>
* 该服务定义了与各个子系统交互的逻辑,业务系统无需知道与内部子系统的交互逻辑,符合迪米特法则
*
* @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);
}
}
}
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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";
}
}

View File

@@ -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 {

View File

@@ -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);
}
}