您的位置:首页 > 其它

对工厂模式的认识和理解(一)

2011-08-12 09:06 148 查看
1.
package com.ethan.dao;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

//使用dom4j解析xml,自己加入jar、import
public class DaoFactory {
//设置一个DAO缓冲池
private Map<String,Object> daoMap = new HashMap<String,Object>();

private static DaoFactory df;

private DaoFactory(String path) throws Exception {

//path 可以用System.getProperty("user.dir")+ package + xml 组合一下,因为xml放在package下边了
Document doc = new SAXReader().read(new File(path+"\\daoContext.xml"));

Element root = doc.getRootElement();
List el = root.elements();

for(Iterator it = el.iterator();it.hasNext()) {
Element element = (Element)it.next();
String id = element.attributeValue("id");
String impl = element.attributeValue("class");

Class clazz = Class.forName(impl);

Object obj = clazz.newInstance();

daoMap.put(id, obj);
}
}

//实例化DAO Factory
public static DaoFactory instance(String path) throws Exception {
if(df==null) {
df = new DaoFactory(path);
}
return df;
}

//获取DAO实例
public Object getDAO(String id) {
return daoMap.get(id);
}
}
daoFactory.xml:
<?xml version="1.0" encoding="UTF-8"?>
<daoContext>
<dao id="userDao" class="com.ethan.dao.impl.UserDAOImpl"/>
<dao id="messageDao" class="com.ethan.dao.impl.MessageDAOImpl"/>
</daoContext>
2.
package com.ethan.dao;

public interface UserDAO {

}
package com.ethan.dao;

public class UserDAOImpl implements UserDAO {

}
package com.ethan.dao;

public class FactoryDAO {
public UserDAO createUserDAO() {
return new UserDAOImpl();
}
}
如果以后换了UserDao的实现,是需要改变 createDAOImpl(), 业务逻辑代码无需改变。好处不言而喻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: