你可以使用一下注册式单例,用spring全局用一个bean来装对应的service。楼主这个策略模式有一个缺点就是必须要用static初始化这些实现类。后期扩展的时候,还是一样要修改这个Share 类。
给你看一段:   简书回复不能带'@'注意自己增加
Bean(name = "accountQueryServiceMap")
    public Map<String, AccountQueryFactory> accountQueryServiceMap() {
        return new ConcurrentHashMap<>();
    }
public abstract class AccountQueryFactory {
Resource(name = "accountQueryServiceMap")
    private Map<String, AccountQueryFactory> accountQueryServiceMap;
    PostConstruct
    public void registService() {
        String queryServiceName = getAccountQueryServiceName();
        if (accountQueryServiceMap.containsKey(queryServiceName)) {
            throw new RuntimeException("定义多个重复AccountQueryService服务!!");
        }
        accountQueryServiceMap.put(queryServiceName, this);
    }
    protected abstract String getAccountQueryServiceName();
    /**
     * 处理
     */
    protected String process(String params) {
        chechAccountValid(params);
        String queryInfo = handleQuery(params);
        return handleResult(queryInfo);
    }
}
public class AliAccountQueryService extends AccountQueryFactory {
    Override
    protected String getAccountQueryServiceName() {
        return TraceCode.ALI_ACCOUNT;
    }
    Override
    protected String handleQuery(String params) {
        String result = "";
        return result;
    }
    
还在使用if else写代码?试试 “策略模式” 吧!来源公众号:程序员小灰作者:LA 我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博、微信、QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同...
 
