JDBC工厂模式

工厂模式是JAVA设计模式中用的比较多 又比较好些的一个模式
在JDBC对数据库操作时,不可避免的会产生依赖,
如UserDao userDao = new UserDaoImpl();
在学习了Spring后我们可以注入,而纯JDBC的话就可以使用工厂模式,利用propertise文件
这里我就用UserDao来举例

------------------------------------------------神奇的分割线---------------------------------------------

首先,我们在src下new一个propertise文件 名为 daoConfig.propertise
在该文件下输入
UserDaoClass = com.test.dao.impl.UserDaoImpl
//propertise文件的规范就是每行都是一个 key 和一个 value
//UserDaoClass 这个就是key,名字随便起
//com.test.dao.impl.UserDaoImpl 这个是value 具体根据自己的包名
//结尾不需要有;表示结束

接着 我们new一个类,起名为 DaoFactory.java
public class DaoFactory{
    //我直接在main里测试 所以用static
    private static UserDao userDao = null;
    private static DaoFactory instance = new DaoFactory();
    //注意 这里连个参数位置不可变 不然会造成NULLPOINTEREXCEPTION 空指针异常
    //userDao会为nul
l

    //这里我们定义个私有的构造函数
    private DaoFactory(){
        try{
            Propertise prop = new Propertise();
            InputStream inStream = DaoFactory.Class.getClassLoader()
                         .getResourceAsStream("daoConfig.propertise");
            //上面我们可以写成inStream = new FileInputStream(new File("src/daoConfig.propertise"));
            //但是这样写的话文件的位置就被写死了,如果我们想改变文件的位置,那必定要改这里的代码,
            //而第一种方法,会自动根据提供的文件名,在classpath下查找
            //所以推荐使用第一种方法
            prop.load(inStream);
            String userDaoClass = prop.getProperty("UserDaoClass");
            //从daoConfig文件中读取出key为UserDaoClass的value并赋给userDaoClass
            userDao = (UserDao)Class.forName(userDaoClass).newInstance();
        }catch(Throwable e){
             throw new ExceptionInInitializerError(e);
             //抛出初始化时的异常
         }
    }

    public static DaoFactory getInstance(){
        return instance ;
    }

    public static UserDao getUserDao(){
        return userDao;
    }
}


-------------------------------------------无敌的分割线-------------------------------------------


完成以上的步骤后
在业务逻辑Bean中
我们只需要通过这样的方式就可以调用这个Dao了
UserDao userDao = DaoFactory.getInstance().getUserDao();




通过这种工厂模式,我们就减少了程序对UserDaoImpl的依赖

posted on 2011-01-04 11:55  gongwei911  阅读(2681)  评论(0)    收藏  举报

导航