你可以使用一下注冊式單例,用spring全局用一個bean來裝對應(yīng)的service。樓主這個策略模式有一個缺點就是必須要用static初始化這些實現(xiàn)類。后期擴展的時候,還是一樣要修改這個Share 類。
給你看一段: 簡書回復(fù)不能帶'@'注意自己增加
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("定義多個重復(fù)AccountQueryService服務(wù)!!");
}
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等等,雖然是同一個內(nèi)容,但是分享到不同的平臺就會有不同...