策略模式在项目中实际应用

Java策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。在Java中实现策略模式,通常包含三个角色:
策略接口:定义了一个公共接口,所有的具体策略类都必须实现这个接口。
具体策略类:实现了策略接口中定义的方法,每一个具体策略类都封装了一种具体的算法或行为。
上下文类:持有一个策略对象的引用,并负责调用其方法来执行相应的算法或行为。上下文类还可以维护对策略对象的引用,并可在运行时动态地改变所使用的策略对象。

  1. 上下文本类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class StrategyContext {
	// 保证线程安全
    private final Map<String, CommonStrategyService> strategyServiceMap = new ConcurrentHashMap<>();

    @Autowired
    public void strategyInterface(Map<String, CommonStrategyService> strategyServiceMap) {
        this.strategyServiceMap.clear();
        strategyServiceMap.forEach(this.strategyServiceMap::put);
    }

    public CommonStrategyService getStrategy(String str) {
        if (str.equals("A")) {
            return this.strategyServiceMap.get(str);
        } else if (str.equals("B")) {
            return this.strategyServiceMap.get(str);
        } else {
            return this.strategyServiceMap.get("COMMON");
        }
    }
}

  1. 策略接口
public interface CommonStrategyService {
    void getTest();

    boolean success();
}

  1. 具体策略类
@Service(value = "A")
public class AStrategyServiceImpl implements CommonStrategyService{
    @Override
    public void getTest() {

    }

    @Override
    public boolean success() {
        return false;
    }
}
@Service(value = "B")
public class BStrategyServiceImpl implements CommonStrategyService{
    @Override
    public void getTest() {

    }

    @Override
    public boolean success() {
        return false;
    }
}
@Service(value = "COMMON")
public class CommonStrategyServiceImpl implements CommonStrategyService{
    @Override
    public void getTest() {

    }

    @Override
    public boolean success() {
        return false;
    }
}
  1. 测试
@Service
public class StrategyTest {
    @Autowired
    private StrategyContext strategyContext;

    public void test() {
        strategyContext.getStrategy("A").getTest();
        strategyContext.getStrategy("B").success();
    }
}

相关推荐

  1. 策略模式项目实际应用

    2024-03-20 08:12:01       22 阅读
  2. 模板方法模式交易策略开发应用

    2024-03-20 08:12:01       18 阅读
  3. 状态模式交易策略开发应用

    2024-03-20 08:12:01       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-20 08:12:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-20 08:12:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-20 08:12:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-20 08:12:01       18 阅读

热门阅读

  1. C++系统设计题目

    2024-03-20 08:12:01       16 阅读
  2. 简述JVM

    简述JVM

    2024-03-20 08:12:01      16 阅读
  3. 每日一题-spring中的设计模式

    2024-03-20 08:12:01       18 阅读
  4. react hook: useRef

    2024-03-20 08:12:01       19 阅读
  5. ref&reactive vue3

    2024-03-20 08:12:01       16 阅读
  6. 国内外15款AI搜索引擎汇总

    2024-03-20 08:12:01       30 阅读
  7. 【React】Diff算法

    2024-03-20 08:12:01       14 阅读
  8. 串口通信----XModem协议协议(文件传输)

    2024-03-20 08:12:01       20 阅读