package five.test.daoFaction;
import java.io.InputStream;
import java.util.Properties;
import five.dao.UserDao;
public class DaoFactory {
// 簡單工廠模式 && 單例模式
private static UserDao ud = null;
private static DaoFactory instance = new DaoFactory();
// 單例模式 構造方法 私有
private DaoFactory(){
try {
Properties properties = new Properties();
//InputStream inputStream = new FileInputStream(new File("src/daoconfig.properties"));
//通過ClassLoader 來得到配置的文件
InputStream inputStream = DaoFactory.class.getClassLoader()
.getResourceAsStream("daoconfig.properties");
properties.load(inputStream);
String className = properties.getProperty("userDaoClass");
Class myClass = Class.forName(className);
ud = (UserDao) myClass.newInstance();
} catch (Exception e) {
// 如果再讀取配置文件時出錯,拋出系統啓動異常
throw new ExceptionInInitializerError(e);
}
}
public static DaoFactory getInstance() {
return instance;
}
public UserDao getUserDao() {
return ud;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package five.test;
import java.sql.Date;
import five.dao.UserDao;
import five.domain.User;
import five.test.daoFaction.DaoFactory;
public class UserDaoTest {
public static void main(String[] args) {
User user = new User(20, null, "20pass", null, 0);
user.setBrithday(new Date(0));
user.setName("dao name1");
user.setMonney(1000.0f);
//依賴 具體實現[new UserDaoImpl();]
//對策 工廠模式 通過配置文件
//存在修改代碼的可能, 在不修改代碼的前提下
//就只能修改 配置文件
//UserDao ud = new UserDaoImpl();
UserDao ud = DaoFactory.getInstance().getUserDao();
ud.addUser(user);
user = ud.getUser(20);
System.out.print(user.getPassword());
}
}