商業理念:
工廠模式將資料層與代理層分開。將細節 分開, 角色分開 、 你只需傳入你想要的東西,他會自動給你生成。
如果你想看到細節就必須 傳入方法。
工廠模式 . 其方法 (傳入 反射的IDAO 返回 (IDAO)). 使用 IAO findAll () 方法。
反射就是要得到類和方法的本身。
商業理念:
工廠模式將資料層與代理層分開。將細節 分開, 角色分開 、 你只需傳入你想要的東西,他會自動給你生成。
如果你想看到細節就必須 傳入方法。
工廠模式 . 其方法 (傳入 反射的IDAO 返回 (IDAO)). 使用 IAO findAll () 方法。
反射就是要得到類和方法的本身。
案例佈局:
①建立工廠
/**
* <b>類描述:</b>DAO工廠 <br>
* <b>郵件:</b> yiyu1@163.com <br>
* @author wonter
*/
public class DAOFactory {
private DAOFactory(){
//空構造 防止被其他類new
}
public static IDAO getInstance(Class clazz) throws InstantiationException, IllegalAccessException{
//newInstance() 反射出原型的所有方法屬性。
return (IDAO)clazz.newInstance();
}
}
②延用第二天所學代理模式,使用代理類調用工廠
/**
* <b>類描述:</b>查詢UserDAO(使用者)表全部資訊 findAll(所有使用者)<br>
* <b>郵件:</b> yiyu1@163.com <br>
* @author wonter
*/
//先import java.util.List;不說了,只講重點。
public List findAll(){
List list=null;
try {
if(list==null)
//以上都不重要,關鍵就下面這一句話!什麼意思呢?
//DAOFactory :①中剛定義的DAO工廠;
//getInstance() :工廠中其方法;
//UserDAO.class :使用者表所有方法與屬性.class 反射原型 ,就是要得到類和方法的本身。
//findAll() :注意的是,它不是工廠的方法。它是通過工廠創造(反射)出來的UserDAO的方法。
向findAll()傳入參數。
list = DAOFactory.getInstance(UserDAO.class).findAll(FINDALL, User.class);
return list;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
③ 接下來就是要被反射的UserDAO這個類,其findAll方法。
/*
*<b>類描述:</b> CompanyDAO的具體實現類 每一個DAO可以實現一個DAOAdapter適配器,也可以直接實現I**DAO。這看實現是否完全。 如果實現不全面,直接實現適配器繼承介面。
* <b>郵件:</b> yiyu1@163.com <br>
* @author wonter
*/
public class UserDAO extends DAOAdapter implements IUserDAO {
public UserDAO() {
//空構造 防止被其他類new
}
/**
* 查詢全部 要使用該方法要求重寫根介面的子介面(I***DAO)
* @param SQL sql查詢語句
* @return 返回該查詢的結果集List
* @throws CRMDBConnException
* @throws CRMSQLException
*/
public List findAll(String SQL, Class clazz) throws CRMDBConnException,
CRMSQLException {
try {
// 關於DAOUtil 就不是今天要講的內容了。你只要知道DAOUtil是傳參與資料庫連接就行了!
return DAOUtil.getInstance().findAll(SQL, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}