JDBC工厂模式
工厂模式是JAVA设计模式中用的比较多 又比较好些的一个模式
在JDBC对数据库操作时,不可避免的会产生依赖,
如UserDao userDao = new UserDaoImpl();
在学习了Spring后我们可以注入,而纯JDBC的话就可以使用工厂模式,利用propertise文件
这里我就用UserDao来举例
------------------------------------------------神奇的分割线---------------------------------------------
首先,我们在src下new一个propertise文件 名为 daoConfig.propertise
在该文件下输入
UserDaoClass = com.test.dao.impl.UserDaoImpl
//propertise文件的规范就是每行都是一个 key 和一个 value
//UserDaoClass 这个就是key,名字随便起
//com.test.dao.impl.UserDaoImpl 这个是value 具体根据自己的包名
//结尾不需要有;表示结束
接着 我们new一个类,起名为 DaoFactory.java
public class DaoFactory{
//我直接在main里测试 所以用static
private static UserDao userDao = null;
private static DaoFactory instance = new DaoFactory();
//注意 这里连个参数位置不可变 不然会造成NULLPOINTEREXCEPTION 空指针异常
//userDao会为null
//这里我们定义个私有的构造函数
private DaoFactory(){
try{
Propertise prop = new Propertise();
InputStream inStream = DaoFactory.Class.getClassLoader()
.getResourceAsStream("daoConfig.propertise");
//上面我们可以写成inStream = new FileInputStream(new File("src/daoConfig.propertise"));
//但是这样写的话文件的位置就被写死了,如果我们想改变文件的位置,那必定要改这里的代码,
//而第一种方法,会自动根据提供的文件名,在classpath下查找
//所以推荐使用第一种方法
prop.load(inStream);
String userDaoClass = prop.getProperty("UserDaoClass");
//从daoConfig文件中读取出key为UserDaoClass的value并赋给userDaoClass
userDao = (UserDao)Class.forName(userDaoClass).newInstance();
}catch(Throwable e){
throw new ExceptionInInitializerError(e);
//抛出初始化时的异常
}
}
public static DaoFactory getInstance(){
return instance ;
}
public static UserDao getUserDao(){
return userDao;
}
}
-------------------------------------------无敌的分割线-------------------------------------------
完成以上的步骤后
在业务逻辑Bean中
我们只需要通过这样的方式就可以调用这个Dao了
UserDao userDao = DaoFactory.getInstance().getUserDao();
通过这种工厂模式,我们就减少了程序对UserDaoImpl的依赖
在JDBC对数据库操作时,不可避免的会产生依赖,
如UserDao userDao = new UserDaoImpl();
在学习了Spring后我们可以注入,而纯JDBC的话就可以使用工厂模式,利用propertise文件
这里我就用UserDao来举例
------------------------------------------------神奇的分割线---------------------------------------------
首先,我们在src下new一个propertise文件 名为 daoConfig.propertise
在该文件下输入
UserDaoClass = com.test.dao.impl.UserDaoImpl
//propertise文件的规范就是每行都是一个 key 和一个 value
//UserDaoClass 这个就是key,名字随便起
//com.test.dao.impl.UserDaoImpl 这个是value 具体根据自己的包名
//结尾不需要有;表示结束
接着 我们new一个类,起名为 DaoFactory.java
public class DaoFactory{
//我直接在main里测试 所以用static
private static UserDao userDao = null;
private static DaoFactory instance = new DaoFactory();
//注意 这里连个参数位置不可变 不然会造成NULLPOINTEREXCEPTION 空指针异常
//userDao会为null
//这里我们定义个私有的构造函数
private DaoFactory(){
try{
Propertise prop = new Propertise();
InputStream inStream = DaoFactory.Class.getClassLoader()
.getResourceAsStream("daoConfig.propertise");
//上面我们可以写成inStream = new FileInputStream(new File("src/daoConfig.propertise"));
//但是这样写的话文件的位置就被写死了,如果我们想改变文件的位置,那必定要改这里的代码,
//而第一种方法,会自动根据提供的文件名,在classpath下查找
//所以推荐使用第一种方法
prop.load(inStream);
String userDaoClass = prop.getProperty("UserDaoClass");
//从daoConfig文件中读取出key为UserDaoClass的value并赋给userDaoClass
userDao = (UserDao)Class.forName(userDaoClass).newInstance();
}catch(Throwable e){
throw new ExceptionInInitializerError(e);
//抛出初始化时的异常
}
}
public static DaoFactory getInstance(){
return instance ;
}
public static UserDao getUserDao(){
return userDao;
}
}
-------------------------------------------无敌的分割线-------------------------------------------
完成以上的步骤后
在业务逻辑Bean中
我们只需要通过这样的方式就可以调用这个Dao了
UserDao userDao = DaoFactory.getInstance().getUserDao();
通过这种工厂模式,我们就减少了程序对UserDaoImpl的依赖
posted on 2011-01-04 11:55 gongwei911 阅读(2681) 评论(0) 收藏 举报
浙公网安备 33010602011771号