1 反射技术
反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式(Factory)和单例模式(Singleton)。
用接口来沟通不同程序的开发进度,不必等上游程序写好代码之后,再注入后面流程的程序员。且在实现上,可以用配置文件灵活变更,而不用重编译整个项目。interface InterfaceTest {
//基于接口规范
public void getName();
}class Test1 implements InterfaceTest {
//不同程序员可以实现不同的重写功能
public void getName() {
System.out.println("test1");
}
}class Test2 implements InterfaceTest {
public void getName() {
System.out.println("test2");
}
}
Factory类如下所示import java.io.FileInputStream;
import java.util.Properties;
class Factory {
private static Properties pro = new Properties();
static {
try {
//通过配置文件来实现载入不同的类,实现不同的功能
pro.load(new FileInputStream("test.property"));
} catch (Exception e) {
e.printStackTrace();
}
}
//保证单例
private static Factory factory = new Factory();
private Factory() {}
public static Factory getFactory() {
return factory;
}
public InterfaceTest getInstance() {
InterfaceTest interfaceTest = null;
try {
//反映功能可灵活实例化不同的类,作框架是很灵活自由的啦
String classInfo = pro.getProperty("test");
Class c = Class.forName(classInfo);
Object obj = c.newInstance();
interfaceTest = (InterfaceTest)obj;
} catch (Exception e) {
e.printStackTrace();
}
return interfaceTest;
}
}
配置文件如下所示test=Test1
测试文件如下所示public class FactoryTest {
public static void main(String[] args) {
System.out.println("~~~~~~~~~~~~~~~~");
Factory factory = Factory.getFactory();
System.out.println("!!!!!!!!!!!!!!!!!");
InterfaceTest inter = factory.getInstance();
System.out.println("@@@@@@@@@@@@@@@@@@");
inter.getName();
System.out.println("##################");
}
}
2 可能存在的问题
这里采用了反射机制,每次Factory返回的都是新的实例,如果你的Factory操作非常频繁,就会返回很多的实例,而这个时候,操作对象类的单例模式就会没有意义,因为实例已经产生了。Class c = Class.forName(classInfo);
Object obj = c.newInstance();