结合工厂模式演进策略模式

This commit is contained in:
2020-03-04 16:25:34 +08:00
parent 1d69454c6b
commit 6c37bbad76
3 changed files with 76 additions and 0 deletions

View File

@@ -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("空促销策略");
}
}

View File

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

View File

@@ -24,4 +24,11 @@ class PromotionStrategyTest {
activity.executePromotionStrategy();
}
@Test
void nonIfElse() {
String promotionKey = "LIJIAN";
PromotionActivity activity = new PromotionActivity(PromotionStrategyFactory.getPromotionStrategy(promotionKey));
activity.executePromotionStrategy();
}
}