19_传智播客JDBC_使用DAO工厂模式(代码超经典)

来源:互联网 发布:mysql sql 每小时统计 编辑:程序博客网 时间:2024/04/28 17:15

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

原创粉丝点击