1.配置文件 中写 键值对 key == value (suibian = 类全名称)
2.类 工厂制造类
/**
*
* 工厂制造类
* @author admin
*
*/
public class FunctoryModel {
public FunctoryModel() {
//构造方法中加载
this.ass();
}
private Map<String, Object> map = new HashMap<String, Object>();
private void ass() {
try {
//加载配置文件
this.addPropertise();
} catch (Exception e) {
e.printStackTrace();
}
}
private void addPropertise() throws FileNotFoundException, IOException,
ClassNotFoundException {
Properties p = new Properties();
//加载配置文件呢
p.load(new FileInputStream(
"D:/AppData/Local/Workspaces/ClassFunctoryModel/src/functory.properties"));
Set<Object> key = p.keySet();
for (Object obj : key) {
String id = (String) obj;
String clazz = p.getProperty((String) obj);
try {
//往Map中插入数据
//方便后续 根据输入的 内容 判断 该生产哪个类
this.setClazz(id, clazz);
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 往Map中插入数据
*
* @param id
* @param clazz
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
private void setClazz(String id, String clazz)
throws ClassNotFoundException, InstantiationException,
IllegalAccessException {
Class<?> claz = Class.forName(clazz);
//用反射 生成类的实例
Object ni = claz.newInstance();
map.put(id, ni);
}
/**
* 得到相应的类
* @param id
* @return
*/
public Object getGen(String id) {
//根据输入的键 在map中寻找 对应的类的全名
Object object = map.get(id);
return object;
}
//测试类
public class Test {
public static void main(String[] args) {
FunctoryModel fm = new FunctoryModel();
Hello gen = (Hello) fm.getGen("suibian");
gen.sayHello();
}
}