【问题标题】:Factory of factories?工厂工厂?
【发布时间】:2016-03-01 16:20:39
【问题描述】:

我有实现MyFactory 接口的具体工厂类。我想根据参数获取具体的工厂对象。如何做到这一点?

一种方法是创建工厂工厂[FoF],而FoF是参数化工厂。

有没有更优雅的方法来做到这一点?

这纯粹是智力练习,我的项目没有遇到任何问题。

【问题讨论】:

  • 我在我正在处理的事情中使用了一个模板来完成类似的工作,但是仅在工厂仅用作创建多态类的通用方式时才有效。如果需要专门设置任何类,则需要针对这些情况专门设置模板,这可能会变得混乱。
  • 我很难想象这个“工厂工厂”可以解决什么商业问题。一个清晰的用例或一些代码可能有助于理清思路。
  • @JohnZwinck 说,用户在赛车游戏中选择了一些自行车[有一些 ID]。我想使用所选自行车的工厂来制造自行车。我会将自行车 ID 传递给 FoF,它会返回适当的工厂对象。
  • 在堆上创建的返回MyFactory对象的函数可以吗?该函数将采用ID 并创建适当的Factory 对象。
  • 你可能想看看抽象工厂模式:en.wikipedia.org/wiki/Abstract_factory_pattern

标签: c++ oop design-patterns factory


【解决方案1】:

如果您能够合并两层工厂,那当然是更可取的解决方案。如果它们具有相同的生命周期,这将是可能的。

如果他们不这样做,那么创建工厂工厂就可以了。模式本身没有问题,模式可以嵌套。你甚至可以创建一个工厂的工厂(请不要),它会起作用。

但是,你应该为工厂的工厂找到一个合适的名称,以便明确意图。工厂工厂对我来说听起来不是一个好名字。选择一个能传达问题域内行为的名称比一个纯粹的面向模式的名称要好。


编辑:有人建议您查看问题的 cmets 中的抽象工厂模式。虽然它肯定是一种有用的模式,并且优秀的软件工程师应该知道,但抽象工厂不是工厂的工厂:该模式抽象了一组相关的工厂,但不是关于创建他们。不过,了解它会有所帮助。

【讨论】:

  • 我建议检查抽象工厂模式。它绝对与工厂工厂不同,但从问题描述来看,它可能是工厂工厂的一个很好的替代方案(这肯定会引起一些人的注意)。例如,不是参数化工厂创建,更多面向 OO 的解决方案可以是专门化​​具有具体派生工厂的抽象工厂。甚至可以将这两种方法结合起来。
猜你喜欢
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多