From 6c37bbad760e307c1a2f18cf38453873f8b17428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Wed, 4 Mar 2020 16:25:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E5=90=88=E5=B7=A5=E5=8E=82=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=BC=94=E8=BF=9B=E7=AD=96=E7=95=A5=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/EmptyPromotionStrategy.java | 17 ++++++ .../strategy/PromotionStrategyFactory.java | 52 +++++++++++++++++++ .../strategy/PromotionStrategyTest.java | 7 +++ 3 files changed, 76 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/EmptyPromotionStrategy.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyFactory.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/EmptyPromotionStrategy.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/EmptyPromotionStrategy.java new file mode 100644 index 0000000..07ff3d1 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/EmptyPromotionStrategy.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +import lombok.extern.slf4j.Slf4j; + +/** + * 空策略 + * + * @author F嘉阳 + * @date 2020/3/4 16:16 + */ +@Slf4j +public class EmptyPromotionStrategy implements PromotionStrategy { + @Override + public void doPromotion() { + log.info("空促销策略"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyFactory.java new file mode 100644 index 0000000..964ea08 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyFactory.java @@ -0,0 +1,52 @@ +package top.fjy8018.designpattern.pattern.behavior.strategy; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 促销策略工厂 + * + * @author F嘉阳 + * @date 2020/3/4 16:09 + */ +public class PromotionStrategyFactory { + + private static Map STRATEGY_MAP = new ConcurrentHashMap<>(); + + /** + * 无促销 + */ + private static final PromotionStrategy NON_PROMOTION = new EmptyPromotionStrategy(); + + static { + STRATEGY_MAP.put(PromotionKey.FANXIAN, new FanXianPromotionStrategy()); + STRATEGY_MAP.put(PromotionKey.MANJIAN, new ManJianPromotionStrategy()); + STRATEGY_MAP.put(PromotionKey.LIJIAN, new LiJianPromotionStrategy()); + } + + /** + * 禁止实例化 + */ + private PromotionStrategyFactory() { + } + + /** + * 开放获取策略的方法 + * + * @param promotionKey + * @return + */ + public static PromotionStrategy getPromotionStrategy(String promotionKey) { + PromotionStrategy strategy = STRATEGY_MAP.get(promotionKey); + return strategy == null ? NON_PROMOTION : strategy; + } + + /** + * 常量定义 + */ + private interface PromotionKey { + String LIJIAN = "LIJIAN"; + String FANXIAN = "FANXIAN"; + String MANJIAN = "MANJIAN"; + } +} 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 index 789942f..cf9f15f 100644 --- a/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyTest.java +++ b/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/PromotionStrategyTest.java @@ -24,4 +24,11 @@ class PromotionStrategyTest { activity.executePromotionStrategy(); } + + @Test + void nonIfElse() { + String promotionKey = "LIJIAN"; + PromotionActivity activity = new PromotionActivity(PromotionStrategyFactory.getPromotionStrategy(promotionKey)); + activity.executePromotionStrategy(); + } } \ No newline at end of file