DAO工厂模式示例

3
我将以此链接为例进行解释。鉴于其他类似实例过于复杂,该示例较易理解。请问以下问题:
  1. 我可以理解接口和实现代码。但是为什么它们返回一个接口?

  2. 另外,在检查字符串是否相等且值为“jdbc”时,两种情况下都返回相同的语句。这里让我感到困惑。难道它们不应该返回同一接口的不同实现吗?

谢谢!

他们不会返回接口UserDAO,而是返回实现了UserDAO接口的UserDAOImpl类,它是一个具体类。 - Mustafa sabir
2
为什么这个被踩了? - chipmunk
1个回答

1
  1. 工厂返回一个接口,以便将使用它们的模块与不同的实现解耦。
    例如,如果 UserDAOImpl 因某种原因更改其名称为 UserDAOConcrete,则您只需要更改工厂代码,而无需更改其他任何内容,因为其他所有内容都在使用接口(未更改)

  2. 我猜用户之所以返回相同的实现是为了简单起见,并且与问题本身无关。这段代码是一个示例。实际上,根据传递给工厂方法的参数,您将返回不同的实现。还请注意,他可能也这样做是因为,最后一个 else 是一个默认实现,用于在前面的条件未通过时提供默认实现。默认实现可能是他已经使用不同参数返回的实现


2
更重要的是,它使您能够根据上下文拥有不同的DAO实现。例如,您可能会拥有一个使用Hibernate实现的UserDaoJpa,用于生产软件,以及一个使用Mockito实现的UserDaoMock,用于自动化测试套件。 - Mikkel Løkke
非常重要的理由 - Matias Cicero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接