import java.util.ResourceBundle;
/**
* 反射 + 抽象工厂
* 关键:
* DataAccess(数据访问类):通过读取配置文件,获取具体工厂类名,
* 通过反射获取具体工厂实例,调用具体工厂方法返回相应实例
* @author zbl
*
*/
public class ReflectCustomer {
public static void main(String[] args) {
DataAccess access = new DataAccess();
access.getDepartment();
access.getUser();
}
}
class DataAccess{
//config为属性文件名,放在包com.test.config下,如果是放在src下,直接用config即可
private static ResourceBundle resource = ResourceBundle.getBundle("test/Factory");
private static IFactory factory;
static{
try {
String key = resource.getString("factoryName");
factory = (IFactory) Class.forName(key).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public void getUser(){
factory.createUser();
}
public void getDepartment(){
factory.createDepartment();
}
}
Factory.properties配置文件(目录:test/Factory)
factoryName=test.ConcreteFactroy1//配置信息
//抽象工厂
public interface IFactory {
public void createUser();
public void createDepartment();
}
//具体工厂
public class ConcreteFactroy1 implements IFactory{
@Override
public void createUser() {
System.out.println("user");
}
@Override
public void createDepartment() {
System.out.println("department");
}
}