工厂设计模式

工厂模式:http://baike.baidu.com/view/1306799.htm

参考博客一篇:http://blog.csdn.net/janepen/article/details/6470471

 

 

我在一个类中要调用一个Dao的接口,需要先实例一个实现了Dao接口的类的对象。关于这个Dao的实现类我只知道之后有可能会用JDBC实现也有可能用Hibernate实现,为了之后不再修改代码。

1,我将实现类的相关信息放在了一个daoconfig.properties文件中,内容:userDaoClass=cn.itcast.jdbc.dao.impl.UserDaoJdbcImpl。等号后边的部分可以根据需求修改成Hibernate。

2,然后在需要实例化对象的地方:“UserDao userDao =  ;”等号的右边根据这个配置文件来内容来进行实例化,但是直接在当前类中写起来不方便维护,而且有可能在别的地方也要使用UserDao,对于UserDao来说没必要创建很多实例,一个就足够了,所以我把这些封装起来,用一个工厂类实现:

 

public class DaoFactory {
    private static UserDao userDao = null;//如果是static顺序一定要在前,不用static也能保证只有一个实例
    private static DaoFactory instance = new DaoFactory();//顺序不能和第一行交换,否则userDao在经历了构造方法之后又会被赋值null

    private DaoFactory() {
        try {
            Properties prop = new Properties();
            InputStream inStream = DaoFactory.class.getClassLoader()
                    .getResourceAsStream("daoconfig.properties");//在此使用其配置文件中的内容
            prop.load(inStream);
            String userDaoClass = prop.getProperty("userDaoClass");
            Class clazz = Class.forName(userDaoClass);
            userDao = (UserDao) clazz.newInstance();
        } catch (Throwable e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static DaoFactory getInstance() {
        return instance;
    }

    public UserDao getUserDao() {
        return userDao;
    }
}

 

这样实例化对象就简单了:UserDao userDao = DaoFactory.getInstance().getUserDao();

posted @ 2013-12-06 11:23  剑握在手  阅读(203)  评论(0编辑  收藏  举报
返回顶部↑