工厂模式应该是每个JAVA初学者包括我在内最不陌生的一种设计模式,在学习简单的JDBC后,我们必然要对DAO工厂有所接触。
引入DAO层的主要目的是降低耦合度,将持久层与业务逻辑层分离,提高扩展和复用,也避免了之后更换持久层带来不必要的开销。
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类
既然都说到了DAO层我正好也复习下,首先我们要明确DaoFactory是为了什么而存在的!?
是为了创建我们所需要的JDBC对象而存在!
package dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* YBH
* @author Administrator
*
*/
public class DAOFactory {
/*
* DAO工厂
*/
private static DAOFactory Instance=null;
/**
* 该例子使用了单例设计模式
* 步骤大概说下吧,
* 1、私有化构造器
* @return
*/
private DAOFactory(){
}
/**
* 2、提供公开的创建对象方法
* 3、创建静态对象DAOFactory
* 4、方法判断使他是同一个对象。
* @return
*/
public static DAOFactory getInstance(){
if(Instance==null){
Instance=new DAOFactory();
}
return Instance;
}
public TestDAO createTestDAO(){
return new TestDAOImpl();
}
}
一个简单的工厂方法模式大概就是上面这个样子!
但是现实中你不可能只有一个Test表需要操作,如果你需要增加新的对象就要在DaoFactory新加方法,这样子就变得不够完美了。
/**
* YBH
* @author Administrator
*
*/
public class DAOFactory {
/*
* DAO工厂
*/
private static DAOFactory Instance=null;
/**
* 该例子使用了单例设计模式
* 步骤大概说下吧,
* 1、私有化构造器
* @return
*/
private DAOFactory(){
}
/**
* 2、提供公开的创建对象方法
* 3、创建静态对象DAOFactory
* 4、方法判断使他是同一个对象。
* @return
*/
public static DAOFactory getInstance(){
if(Instance==null){
Instance=new DAOFactory();
}
return Instance;
}
/**
* 利用反射机制实现对象创建
* @param daoIndex daoimpl的地址如:dao.impl.UserDaoImpl
* @return
*/
public Object getDAO(String daoIndex) {
Class<?> clazz;
try {
clazz = Class.forName(daoIndex);
return clazz.newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
大概就是这个样子
