比较这两种模式 - Factory and DAO
模式,我发现它们非常相似:
它们都有接口(Product/Dao
),工厂(ProductFactory/DaoFactory
)和具体实现(ConcreteProduct,ConcreteDao
)。
Factory创建一些具体的实现对象,客户端通过接口使用此对象。
他们是相似还是我不明白?或许Dao模式是工厂模式的具体实现?
提前致谢。
答案 0 :(得分:1)
IMO他们非常不同
DAO
用于在序列化(通常是sql)版本的数据和Java对象之间进行转换
另一方面,Factory
可用于促进大部分工作相似的问题的通用解决方案。我之后创建的一个例子是SocketHandlerFactory,由通用ServerSocket使用,因此无论生成的Socket是否需要处理,您都可以在Factory中对此进行配置。
这是否有所启发?
答案 1 :(得分:1)
数据访问对象(DAO
)模式抽象出应用程序中持久性的细节。而不是让域逻辑直接与数据库,文件系统,Web服务或任何其他持久性机制通信:域逻辑代替DAO层。然后,此DAO层与底层持久性系统或服务进行通信。
DAO
层的优势在于,如果您需要更改基础持久性机制,则只需更改DAO层,而不是更改DAO
层中域逻辑中的所有位置用于。
请查看this article以便更好地理解。
在工厂模式中,我们创建对象而不将创建逻辑暴露给客户端,并使用通用接口引用新创建的对象。
客户需要产品,但不是直接使用new运算符创建产品,而是向工厂对象询问新产品,提供有关所需对象类型的信息。
工厂实例化一个新的具体产品,然后将新创建的产品返回给客户端(转换为抽象产品类)。
客户将产品用作抽象产品,而不了解其具体实施。
阅读此article以便更好地理解。
工厂模式谈论对象的创建& DAO模式谈论数据管理
答案 2 :(得分:1)
我假设当你提到DAO模式时,你会想到这样的事情:
然而,DAO并不一定需要工厂来创造它们。例如,在Spring上下文中,Repositories
和DAOs
之间没有区别,并且就客户端而言,没有存储库工厂。
引用Oracle文章,该图表取自,他们实际上正在使用GoF工厂模式(Gang of Four书中有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模式中的工厂可能指的是“真实的”,则用例存在明显的差异。工厂模式作为额外的好处添加,而不是所述模式的组成部分。
答案 3 :(得分:0)
主要区别在于使用这些设计模式的语义上下文。
DAO用于抽象出数据库处理的域逻辑。
Fatory用于抽象出对象创建逻辑。
不要担心实现/接口细节。
将您的应用程序分层,如果您需要数据库,那么,拥有DAO是一个选项,可以跨层使用。