/**
* @ClassName Version
* @Description 父類爲抽象類,定義一個抽象方法,子類通過重寫此方法完成各自業務邏輯
* @author LBQ
* @Date 2019年3月8日 下午3:18:58
* @version 1.0.0
*/
public abstract class Version {
public abstract String executor(String json);
}
/**
* @ClassName Version_1
* @Description 子類版本1,類命名規則爲:父類名+"_"+版本號,重寫父類方法,完成自有業務邏輯
* @author LBQ
* @Date 2019年3月8日 下午3:20:25
* @version 1.0.0
*/
public class Version_1 extends Version {
@Override
public String executor(String json) {
System.out.println("調用1版本接口");
return "It is 1 "+json;
}
}
/**
* @ClassName Version_2
* @Description 子類版本2,類命名規則爲:父類名+"_"+版本號,重寫父類方法,完成自有業務邏輯
* @author LBQ
* @Date 2019年3月8日 下午3:22:25
* @version 1.0.0
*/
public class Version_2 extends Version {
@Override
public String executor(String json) {
System.out.println("調用2版本接口");
return "It is 2 "+json;
}
}
/**
* @ClassName ExecuterUtil
* @Description 執行器工具
* @author LBQ
* @Date 2019年3月8日 下午3:23:11
* @version 1.0.0
*/
public class ExecuterUtil {
public static void main(String[] args) throws Exception {
// 通過更改版本號,實現不同業務邏輯的切換
String version = "1";
String json = "apple";
try {
Version v = ExecuterUtil.executeByVersion(Version.class, version);
String str = v.executor(json);
System.out.println(str);
} catch (Exception e) {
System.out.println("[Version:" + version + "]-沒有該版本接口!");
}
}
/**
* @Description 根據傳入類型,獲取全類名拼接版本號,通過反射去實例化一個對象
* @param clazz
* @param version
* @return
* @throws Exception
*/
@SuppressWarnings("all")
private static <T> T executeByVersion(Class clazz, String version) throws Exception {
// 根據 全類名+"_"+版本號,去實例化對應的業務版本類-(父類和版本類,必須在同一包下哦!)
T v = (T) Class.forName(clazz.getName() + "_" + version).newInstance();
return v;
}
}
1.當接口需要通過版本號,去進行動態切換業務實現邏輯時,可以使用此方法
2.當需要新增一個版本實現時,只要創建一個Vesion_3繼承Vesion,重寫業務邏輯就行,擴展方便
---------------------
版權聲明:本文爲CSDN博主「CoderPOPO」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/CoderPOPO/article/details/88352017