当代码中有多种执行策略时,可以使用策略模式让代码更加清晰、简洁
首先,需要一个抽象类,定义所有策略的继承类需要的方法(通俗点说,就是假如大家都要去查询,但是我查的方法和你查的方法不一样,但大家都是查询,这个抽象类就是写大家要干什么,但不写怎么干):
public abstract class AbstractQueryStrategy {
@Autowired
protect AServer aServer;
@Autowired
protect BServer bServer;
public abstract String queryInfo();
}
接着,就是继承这个抽象类的策略方法(就是具体怎么干,相互之间不一样):
策略A
@Component
public class AQueryStrategy extends AbstractQueryStrategy{
@Override
public String queryInfo(){
return aServer.query();
}
}
策略B
@Component
public class BQueryStrategy extends AbstractQueryStrategy{
@Override
public String queryInfo(){
return bServer.query();
}
}
现在策略有了,那怎么调用呢:
通过@Component自动装载继承类、实现类到Map的机制(详细可见博客:https://blog.csdn.net/qq_38425719/article/details/104699289),通过调用QueryStrategyManager方法传入需要执行策略的名poolId(驼峰式,比如:aQueryStrategy)即可进行相应的策略方法
@Component
public class QueryStrategyManager{
private final Map<String, AbstractQueryStrategy> strategyMap = new ConcurrentHashMap<>();
public QueryStrategyManager(Map<String, AbstractQueryStrategy> strategyMap){
this.strategyMap.clear();
strategyMap.forEach((k, v)-> this.strategyMap.put(k, v));
}
public String queryInfo(String poolId){
return strategyMap.get(poolId).queryInfo();
}
}