【老王公众号】

一天学一个模式_第四天:工厂模式

商业理念:
  工厂模式将数据层与代理层分开。将细节 分开, 角色分开 、 你只需传入你想要的东西,他会自动给你生成。
  如果你想看到细节就必须 传入方法。
  工厂模式 . 其方法 (传入 反射的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;
   }
  }

posted @ 2011-08-29 13:03  CTO老王  阅读(577)  评论(0编辑  收藏  举报