一天学一个模式_第四天:工厂模式
商业理念:
工厂模式将数据层与代理层分开。将细节 分开, 角色分开 、 你只需传入你想要的东西,他会自动给你生成。
如果你想看到细节就必须 传入方法。
工厂模式 . 其方法 (传入 反射的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;
}
}
加微信:wonter 发送:技术Q
医疗微信群:
加微信:wonter 发送:医疗Q
更多文章关注公众号: