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

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();
    }
}
上一篇:su: authentication failure 解决方法-解决办法:


下一篇:python车辆故障管理系统的设计与实现flask-django-nodejs-php