创建Dao具体实例的工厂:
工厂解耦: 只需在配置文件中改动,而不需要修改源代码
各层之间耦合性极低
使用的设计模式: 单例 和 工厂
*******************************************************************************************
src下面创建一个文件dao.properties
userDao=com.itheima.dao.impl.UserDaoMySQLImpl1(实现类的路径)
*******************************************************************************************
public class DaoFactory {
// 使用饿汉式创建单例类
private static DaoFactory instance = new DaoFactory();
private DaoFactory(){}
public static DaoFactory getInstance(){
return instance;
}
// spring的设计思想
// 读取配置文件中输入的Dao实现方式类的全名称来设置Dao的实现方式
private static String userDaoImplClassName;
static{
try {
InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
Properties props = new Properties();
props.load(in);
userDaoImplClassName = props.getProperty("userDao");
} catch (IOException e) {
e.printStackTrace();
}
}
// 使用工厂设计模式来获取Dao的多种实现方式
public UserDao getUserDao(){
try {
return (UserDao) Class.forName(userDaoImplClassName).newInstance();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}
*******************************************************************************************
有三个dao实现类:
UserDaoDom4jImpl
UserDaoMySQLImpl
UserDaoMySQLImpl1
通过工厂修改service实现调用的dao接口即可,如下:
// 使用修改配置文件中dao实现方式的类名称来获取dao的实现方式
private UserDao dao = DaoFactory.getInstance().getUserDao();
*******************************************************************************************
工厂解耦: 只需在配置文件中改动,而不需要修改源代码
各层之间耦合性极低
使用的设计模式: 单例 和 工厂
*******************************************************************************************
src下面创建一个文件dao.properties
userDao=com.itheima.dao.impl.UserDaoMySQLImpl1(实现类的路径)
*******************************************************************************************
public class DaoFactory {
// 使用饿汉式创建单例类
private static DaoFactory instance = new DaoFactory();
private DaoFactory(){}
public static DaoFactory getInstance(){
return instance;
}
// spring的设计思想
// 读取配置文件中输入的Dao实现方式类的全名称来设置Dao的实现方式
private static String userDaoImplClassName;
static{
try {
InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
Properties props = new Properties();
props.load(in);
userDaoImplClassName = props.getProperty("userDao");
} catch (IOException e) {
e.printStackTrace();
}
}
// 使用工厂设计模式来获取Dao的多种实现方式
public UserDao getUserDao(){
try {
return (UserDao) Class.forName(userDaoImplClassName).newInstance();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}
*******************************************************************************************
有三个dao实现类:
UserDaoDom4jImpl
UserDaoMySQLImpl
UserDaoMySQLImpl1
通过工厂修改service实现调用的dao接口即可,如下:
// 使用修改配置文件中dao实现方式的类名称来获取dao的实现方式
private UserDao dao = DaoFactory.getInstance().getUserDao();
*******************************************************************************************