java反射加工厂模式
时间: 2023-11-29 11:44:43 浏览: 32
Java反射和工厂模式可以结合使用,实现无侵入式的业务代码。具体实现步骤如下:
1.定义一个策略接口类,例如IStartegy,其中包含一个run方法。
2.定义多个实现了IStartegy接口的策略类,例如Startegy1、Startegy2等,每个策略类都实现了run方法。
3.定义一个策略工厂类,例如StartegyFactory,其中包含一个静态方法getStartegy,该方法接收一个枚举类型参数,根据不同的枚举值返回不同的策略对象。
4.使用反射机制,动态获取枚举值对应的策略类,并通过工厂类返回该策略对象。
下面是一个示例代码:
```java
// 定义策略接口类
public interface IStartegy {
void run(String test);
}
// 定义多个实现了IStartegy接口的策略类
public class Startegy1 implements IStartegy {
@Override
public void run(String test) {
System.out.println("Startegy1: " + test);
}
}
public class Startegy2 implements IStartegy {
@Override
public void run(String test) {
System.out.println("Startegy2: " + test);
}
}
// 定义策略工厂类
public class StartegyFactory {
public static IStartegy getStartegy(EnumType type) {
try {
// 动态获取枚举值对应的策略类
Class<?> clazz = Class.forName(type.getClassName());
// 返回该策略对象
return (IStartegy) clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
// 定义枚举类型
public enum EnumType {
TYPE1("Startegy1"),
TYPE2("Startegy2");
private String className;
EnumType(String className) {
this.className = className;
}
public String getClassName() {
return className;
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
// 获取枚举值对应的策略对象
IStartegy startegy = StartegyFactory.getStartegy(EnumType.TYPE1);
// 调用策略对象的run方法
startegy.run("test");
}
}
```