你可以使用一下注册式单例,用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等等,虽然是同一个内容,但是分享到不同的平台就会有不同...