初级策略模式

This commit is contained in:
2020-03-04 16:09:24 +08:00
parent 751a142440
commit 1d69454c6b
6 changed files with 113 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 15:38
*/
@Slf4j
public class FanXianPromotionStrategy implements PromotionStrategy {
@Override
public void doPromotion() {
log.info("返现促销,返回金额存放到用户余额中");
}
}

View File

@@ -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("立减促销,课程价格直接减去配置的价格");
}
}

View File

@@ -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");
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,12 @@
package top.fjy8018.designpattern.pattern.behavior.strategy;
/**
* 促销接口
*
* @author F嘉阳
* @date 2020/3/4 15:37
*/
public interface PromotionStrategy {
void doPromotion();
}

View File

@@ -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();
}
}