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