当前位置: 首页 > 面试题库 >

在下面的示例中,使用Abstract Factory而不是factory方法的真正好处是什么?

唐沈义
2023-03-14
问题内容

我看到许多像我一样的人难以“抓住”抽象工厂和工厂模式之间的具体差异。我对设计模式不熟悉,我遇到了这个示例http://www.oracle.com/technetwork/java/dataaccessobject-138824.html,并且我正在尝试加深主题。

通过比较,我发现对于3个DTO,我们有:

1)抽象工厂

  • 1个抽象类(带有3个抽象方法和3个切换用例);
  • 3种持久性类型的工厂类(每种都有3种获取DTO DAO的方法)
  • 3个接口和9个DAO。

2)工厂方法:

  • 3个工厂类,每个接口一个(每个带有3个开关箱);
  • 可能我可以创建3个超类,从中扩展DAO类以不重复代码,例如用于连接数据库的代码。
  • 3个接口和9个DAO。

从代码量的角度来看,我看不出任何实质性的区别。如果您需要添加新的持久性支持或新的接口/ DTO,则差异是最小的(并且是互补的)。

从客户的角度来看:

1)抽象工厂:

public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE;

DAOFactory daoFactory = DAOFactory.getDAOFactory(PERSISTENCE_TYPE);

CustomerDAO cDAO = daoFactory.getCustomerDAO();
AccountDAO aDAO = daoFactory.getAccountDAO();
OrderDAO oDAO = daoFactory.getOrderDAO();

2)工厂方法:

public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE;

CustomerDAO cDAO = CustomerDAOFactory.getCustomerDAO(PERSISTENCE_TYPE);
AccountDAO aDAO = AccountDAOFactory.getAccountDAO(PERSISTENCE_TYPE);
OrderDAO oDAO = OrderDAOFactory.getOrderDAO(PERSISTENCE_TYPE);

使用有关持久性类型的DAOFactory并返回与该支持有关的所有DAO而不是为每个DTO使用多个DAOFactory以获得所使用的持久性类型的DAO是否有优势?

现在,我只看到使用抽象工厂的美学概念差异,是否还有我对软件设计的无知无法掌握的实用程序利益?


问题答案:

以前的笔记的一个注释您可以阅读Efecrive Java 2nd Edition中的工厂方法。但是要想想模式之间在现实世界中的差异,请参见:例如

想象一下,您正在盖房子,然后接近木匠的窗户。您提出您的要求,他将构建一个窗口。在这种情况下,木匠是窗户的工厂。您的规格是工厂的输入,窗口是工厂的输出。

抽象工厂

现在,考虑该窗口的相同示例。您可以去木匠那里,也可以去窗户商店或PVC商店。他们都是窗户工厂。根据情况,您可以确定需要处理的工厂类型。

因此,结论-这取决于您要解决的问题。



 类似资料:
  • 在写问题之前,我阅读了以下参考文献: 工厂方法与抽象工厂 抽象工厂与工厂方法(范围) 抽象工厂、工厂方法、建设者 工厂、抽象工厂和工厂方法 抽象工厂模式与工厂方法的区别 我看到许多像我一样的人很难“理解”抽象工厂和工厂模式之间的具体区别。我不熟悉设计模式,我遇到了这个例子http://www.oracle.com/technetwork/java/dataaccessobject-138824.h

  • 如果我的代码返回,但可以为空。转换它以返回是否有好处。它是否会为空而不是空的实例增加任何好处?

  • 我最近看到我的朋友编写的一个 类有很多方法。该类与图像有关,并且具有诸如 我问他为什么要使用。我知道编译器会更改 到 他只是说,它减少了对函数的调用,并且只在实用程序方法上使用它们。每次复制相同的代码不会增加程序大小吗? 现在需要这个吗?如果需要,应该在什么时候使用它们? 编辑 我在Patrick提供的一个列表中列出了大多数问题和优点,以帮助那些不想浏览链接的未来观众。 问题 用扩展的函数体替换调

  • null 正确的方法是不间断地睡眠。

  • 问题内容: 我已经阅读了Python中的Class方法[什么用?但是这篇文章中的例子很复杂。我正在寻找一个清晰,简单,准系统的Python类方法用例的例子。 您能否列举一个小的特定示例用例,其中Python类方法将是完成此工作的正确工具? 问题答案: 初始化的辅助方法:

  • 问题内容: 对于有关辅助程序/实用程序类的这些简单问题,我从未找到好的答案: 为什么我要创建一个单例(无状态)而不使用静态方法? 如果对象没有状态,为什么需要一个对象实例? 问题答案: 通常,单例用于向应用程序引入某种 全局状态 。(说实话,通常不是很必要,但这是另一个话题。) 但是,在一些极端情况下,甚至 无状态 单例也可能有用: 您希望在可预见的将来用状态扩展它。 由于某些特定的 技术 原因,