工廠設計模式

劍握在手發表於2013-12-06

工廠模式: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();

相關文章