SpringBoot 策略模式

当代码中有多种执行策略时,可以使用策略模式让代码更加清晰、简洁

首先,需要一个抽象类,定义所有策略的继承类需要的方法(通俗点说,就是假如大家都要去查询,但是我查的方法和你查的方法不一样,但大家都是查询,这个抽象类就是写大家要干什么,但不写怎么干):

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

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值