策略模式中注入dao
时间: 2023-08-16 18:13:41 浏览: 47
在策略模式中,注入DAO(数据访问对象)是一种常见的做法,它可以实现策略对象对数据访问的解耦和灵活性。通过将DAO作为策略对象的一个属性,并在策略对象的构造函数或设置方法中进行注入,可以将数据访问的具体实现与策略对象解耦。
下面是一个示例代码,演示如何在策略模式中注入DAO:
```java
// DAO 接口
public interface UserDao {
void save(User user);
}
// DAO 实现类
public class UserDaoImpl implements UserDao {
@Override
public void save(User user) {
// 实现具体的数据保存逻辑
System.out.println("Saving user: " + user.getName());
}
}
// 策略接口
public interface SaveStrategy {
void save(User user);
}
// 策略实现类 - 使用注入的 DAO 进行数据保存
public class DaoSaveStrategy implements SaveStrategy {
private UserDao userDao;
public DaoSaveStrategy(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save(User user) {
userDao.save(user);
}
}
// 使用策略模式进行数据保存
public class Main {
public static void main(String[] args) {
// 创建 DAO 实例
UserDao userDao = new UserDaoImpl();
// 创建策略实例,并注入 DAO
SaveStrategy strategy = new DaoSaveStrategy(userDao);
// 创建用户对象
User user = new User("Alice");
// 使用策略进行数据保存
strategy.save(user);
}
}
```
在上述示例中,我们定义了一个`UserDao`接口和其实现类`UserDaoImpl`,以及一个`SaveStrategy`接口和其实现类`DaoSaveStrategy`。在`DaoSaveStrategy`中,我们将`UserDao`作为一个属性,并在构造函数中进行注入。这样,`DaoSaveStrategy`就可以使用注入的`UserDao`进行数据保存操作。
当我们需要改变数据访问的具体实现时,只需要修改注入的DAO对象即可,而不需要修改策略对象的代码。这样可以有效地解耦策略对象和数据访问的具体实现,提高代码的灵活性和可维护性。