daoconfig.properties配置文件内容:
userDaoClass=com.ls.www.dao.impl.UserDaoImpl
测试类
package com.ls.www.dao;
import com.ls.www.domain.User;
public class UserDaoTest {
public static void main(String[] args) {
UserDao userDao=DaoFactory.getInstance().getUserDao();
User user=userDao.getUser(4);
userDao.delete(user);
}
}
简单工厂类:
package com.ls.www.dao;
import java.io.InputStream;
import java.util.Properties;
public class DaoFactory {
private UserDao userDao=null;
//使用单例模式
private static DaoFactory instance=new DaoFactory();
private DaoFactory() {
try {
Properties prop=new Properties();
InputStream in =DaoFactory.class.getClassLoader()
.getResourceAsStream("daoconfig.properties");
prop.load(in);
String userDaoClassName=
prop.getProperty("userDaoClass");
userDao=(UserDao)Class.forName(userDaoClassName).newInstance();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static DaoFactory getInstance(){
return instance;
}
public UserDao getUserDao(){
return userDao;
}
}
Dao接口
package com.ls.www.dao;
import com.ls.www.domain.User;
public interface UserDao {
public abstract void addUser(User user);
public abstract User getUser(int id);
public abstract User findUser(String loginName,String password);
public abstract void update(User user);
public abstract void delete(User user);
}
通过以上代码可发现:我们的程序是面向接口编程的,所有代码中没有一个new关键字,也就是说测试类不依赖于接口的具体实现,从而实现解耦。以后如果具体实现有变化,只需在配置文件中的value(等号右边)修改为对应的全限定名。