240 发简信
IP属地:广西
  • 你可以使用一下注册式单例,用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等等,虽然是同一个内容,但是分享到不同的平台就会有不同...