在上一个代码Dao的实现与测试中,如果要修改Dao实现就要修改源代码,很不方便,现在使用工厂模式实现UserDao,代码不依赖具体的类。
1、配置文件
#daoconfig.perporties
userDaoClass=cn.itcast.dao.Impl.UserDaoJdbcImpl
2、工厂
package cn.itcast.jdbc.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
public class DaoFactory {
private static UserDao userDao = null;
private static DaoFactory instance = new DaoFactory();
//工厂一般使用单例模式
private DaoFactory() {
try {
Properties prop = new Properties(); // Preporties类专门操作preporties文件
// InputStream inStream = new FileInputStream(new File("src/daoconfig.preporties")); //死路径
InputStream inStream = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.preporties");
prop.load(inStream);
String userDaoClass = prop.getProperty("userDaoClass");
Class clazz=Class.forName(userDaoClass); //将类装载到虚拟机,class对象
userDao=(UserDao)clazz.newInstance(); //newInstance()方法构造实例
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static DaoFactory getInstance() {
return instance;
}
public UserDao getUserDao() {
return userDao;
}
}
3、测试
package cn.itcast.jdbc.dao;
import java.util.Date;
import cn.itcast.domain.User;
public class UserDaoTest {
public static void main(String[]args){
UserDao userDao=DaoFactory.getInstance().getUserDao();
User user=new User();
user.setBirthday(new Date());
user.setName("dao name1");
user.setMoney(1000f);
// userDao.addUser(user);
// User u=userDao.findUser(user.getName(), null);
// System.out.println(u.getId());
User u=userDao.getUser(5);
u.setMoney(30000f);
userDao.update(u);
// User u1=userDao.getUser(6);
// userDao.delete(u1);
}
}
现在要更改Dao实现只需要修改配置文件,不需要修改代码。