From 1d69454c6b3dc9425ead09c7cf29356137d55b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Wed, 4 Mar 2020 16:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E7=BA=A7=E7=AD=96=E7=95=A5=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/FanXianPromotionStrategy.java | 17 ++++++++++++ .../strategy/LiJianPromotionStrategy.java | 17 ++++++++++++ .../strategy/ManJianPromotionStrategy.java | 17 ++++++++++++ .../behavior/strategy/PromotionActivity.java | 23 ++++++++++++++++ .../behavior/strategy/PromotionStrategy.java | 12 +++++++++ .../strategy/PromotionStrategyTest.java | 27 +++++++++++++++++++ 6 files changed, 113 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/FanXianPromotionStrategy.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/LiJianPromotionStrategy.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/ManJianPromotionStrategy.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionActivity.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategy.java create mode 100644 src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyTest.java 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