一天學一個模式_第四天:工廠模式

  • 610
  • 0

商業理念:

工廠模式將資料層與代理層分開。將細節 分開, 角色分開 、 你只需傳入你想要的東西,他會自動給你生成。
如果你想看到細節就必須 傳入方法。
工廠模式 . 其方法 (傳入 反射的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;
   }
  }