模拟动态工厂 -----工厂模式

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();
}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值