工厂设计模式和DAO设计模式有什么区别

What is difference between factory design pattern and DAO design pattern

比较这两个模式 - Factory and DAO 模式,我发现它们非常相似:

两者都有接口(Product/Dao)、工厂(ProductFactory/DaoFactory)和具体实现(ConcreteProduct,ConcreteDao)。

工厂创建一些具体的实现对象,该对象通过接口被客户端使用。

他们是相似的还是我不明白?或者Dao模式是工厂模式的具体实现?

提前致谢。

IMO 他们很不一样

DAOs 用于在数据的序列化(通常是 sql)版本和 Java 对象之间进行转换

另一方面,Factory 可用于为大部分工作相似的问题提供通用解决方案。我不久前创建的一个示例是 SocketHandlerFactory,由通用 ServerSocket 使用,因此无论生成的 Socket 需要如何处理,您都可以在工厂中配置它。

这是否说明了一些问题?

数据访问对象 (DAO) 模式抽象了应用程序中持久性的细节。不是让领域逻辑直接与数据库、文件系统、Web 服务或任何其他持久性机制通信:领域逻辑改为与 DAO 层对话。然后,该 DAO 层与底层持久性系统或服务进行通信。

DAO层的优点是如果你需要改变底层的持久化机制你只需要改变DAO层,而不是领域逻辑中的所有地方DAO层使用自.

查看 this article 以获得更好的理解。

工厂模式中,我们在不向客户端公开创建逻辑的情况下创建对象,并使用公共接口引用新创建的对象。

The client needs a product, but instead of creating it directly using the new operator, it asks the factory object for a new product, providing the information about the type of object it needs.

The factory instantiates a new concrete product and then returns to the client the newly created product(casted to abstract product class).

客户将产品作为抽象产品使用,而不知道其具体实现。

阅读此 article 以更好地理解。

工厂模式讲对象的创建&DAO模式讲数据的管理

主要区别在于使用这些设计模式的语义上下文。

DAO 用于抽象出数据库处理的领域逻辑。

Fatory 用于抽象对象创建逻辑。

不用担心 implementation/interface 细节。

将您的应用程序分成多个层,如果您需要一个数据库,那么,拥有 DAO 是一种选择,它可以跨层使用。

我假设当您提到 DAO 模式时,您会想到这样的事情:

source

然而,DAO 不一定需要工厂来创建它们。例如,在 Spring 上下文中,RepositoriesDAOs 之间没有区别,并且就涉及客户端而言没有存储库工厂。

引用 Oracle 文章,图表取自,他们实际上正在使用 GoF 工厂模式(四人帮中有 2 本书;抽象工厂和工厂方法):

The DAO pattern can be made highly flexible by adopting the Abstract Factory [GoF] 
and the Factory Method [GoF] patterns (see "Related Patterns" in this chapter).

总而言之,如果不是两种模式的结构,则在用例方面存在明显差异,并且 DAO 模式中的工厂可能指的是 'real' 工厂模式,它是作为额外好处添加的, 不是所述模式的组成部分。