/**
* @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