diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/FanXianPromotionStrategy.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/FanXianPromotionStrategy.java new file mode 100644 index 0000000..4f9a225 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/FanXianPromotionStrategy.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +import lombok.extern.slf4j.Slf4j; + +/** + * 返现促销策略 + * + * @author F嘉阳 + * @date 2020/3/4 15:38 + */ +@Slf4j +public class FanXianPromotionStrategy implements PromotionStrategy { + @Override + public void doPromotion() { + log.info("返现促销,返回金额存放到用户余额中"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/LiJianPromotionStrategy.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/LiJianPromotionStrategy.java new file mode 100644 index 0000000..e41dfc2 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/LiJianPromotionStrategy.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +import lombok.extern.slf4j.Slf4j; + +/** + * 立减促销策略 + * + * @author F嘉阳 + * @date 2020/3/4 15:39 + */ +@Slf4j +public class LiJianPromotionStrategy implements PromotionStrategy { + @Override + public void doPromotion() { + log.info("立减促销,课程价格直接减去配置的价格"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/ManJianPromotionStrategy.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/ManJianPromotionStrategy.java new file mode 100644 index 0000000..22832bc --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/ManJianPromotionStrategy.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +import lombok.extern.slf4j.Slf4j; + +/** + * 满减促销策略 + * + * @author F嘉阳 + * @date 2020/3/4 15:38 + */ +@Slf4j +public class ManJianPromotionStrategy implements PromotionStrategy { + @Override + public void doPromotion() { + log.info("满减促销,满200-20"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionActivity.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionActivity.java new file mode 100644 index 0000000..33b7750 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionActivity.java @@ -0,0 +1,23 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +/** + * 促销包装类 + * + * @author F嘉阳 + * @date 2020/3/4 15:42 + */ +public class PromotionActivity { + + private PromotionStrategy promotionStrategy; + + public PromotionActivity(PromotionStrategy promotionStrategy) { + this.promotionStrategy = promotionStrategy; + } + + /** + * 执行促销逻辑 + */ + public void executePromotionStrategy() { + this.promotionStrategy.doPromotion(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategy.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategy.java new file mode 100644 index 0000000..01b6d66 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategy.java @@ -0,0 +1,12 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +/** + * 促销接口 + * + * @author F嘉阳 + * @date 2020/3/4 15:37 + */ +public interface PromotionStrategy { + + void doPromotion(); +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyTest.java b/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyTest.java new file mode 100644 index 0000000..789942f --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyTest.java @@ -0,0 +1,27 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.Test; + +/** + * @author F嘉阳 + * @date 2020/3/4 15:46 + */ +@Slf4j +class PromotionStrategyTest { + + @Test + void existIfElse() { + String promotionKey = "LIJIAN"; + PromotionActivity activity = null; + if (StringUtils.equals(promotionKey, "LIJIAN")) { + // 方法和类本身线程安全 + activity = new PromotionActivity(new LiJianPromotionStrategy()); + } else if (StringUtils.equals(promotionKey, "MANJIAN")) { + activity = new PromotionActivity(new FanXianPromotionStrategy()); + } + + activity.executePromotionStrategy(); + } +} \ No newline at end of file