Dao工厂模式(代码比较好)

在上一个代码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实现只需要修改配置文件,不需要修改代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值