在 Java 的 DAO(Data Access Object)模式 中引入 工厂模式,主要是为了解决解耦、可扩展性和维护性的问题。下面从“为什么需要”和“带来什么好处”两个角度说明。
DAO 的作用是隔离业务逻辑与数据库访问细节,例如:
UserDao userDao = new UserDaoImpl();
但这样写会有问题:
硬编码实现类
创建逻辑分散
new XXXDaoImpl()不利于测试
没有工厂:
UserDao dao = new UserDaoMySQLImpl();
使用工厂:
UserDao dao = DaoFactory.getUserDao();
✅ 业务层只依赖接口,不依赖实现
例如:
public class DaoFactory {
public static UserDao getUserDao() {
// 可配置、可切换
return new UserDaoOracleImpl();
}
}
或结合配置文件 / Spring:
userDao=com.xxx.UserDaoMySQLImpl
✅ 不改业务代码即可换数据库
DAO 的创建可能涉及:
工厂可以统一封装:
public UserDao getUserDao() {
return new UserDaoImpl(dataSource);
}
✅ 避免重复代码
UserDao dao = DaoFactory.getUserDao(); // 可返回 Mock
✅ 单元测试更易做
Dao(接口)
├── UserDao
├── OrderDao
DaoImpl(实现)
├── UserDaoMySQLImpl
├── UserDaoOracleImpl
DaoFactory(工厂)
└── getUserDao()
在现代项目中:
@Repository
public class UserDaoImpl implements UserDao {}
@Autowired
private UserDao userDao;
✅ Spring 已经帮你做了工厂做的事
DAO 用工厂模式,是为了让“用 DAO 的人”不关心“DAO 是怎么来的”,从而实现解耦、可扩展、易维护、易测试。
如果你愿意,我也可以给你画一个完整 DAO + 工厂模式示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。