【发布时间】:2017-07-27 13:32:23
【问题描述】:
我有一个 Product 类,其中包含方法和复杂的数据结构。我将有 8 种类型的产品,它们仅在数据结构的内容上有所不同,没有别的。然后,在我的应用程序中,我需要为 8 种产品类型中的每一种创建一个实例,一次,并且存在的产品类型在运行时不会改变。
什么是最好的方法,为什么?
A) 类产品有 8 个子类。这些子类中的每一个仅定义构造函数。在每个构造函数中,都会为该类型的产品正确创建数据结构。
B) 一个工厂类有 8 个子类。这些子类中的每一个都是 8 种产品中每一种的具体工厂。类 Product 没有子类。每个具体工厂通过创建适当的数据结构并将其作为参数传递给 Product 类的构造函数来创建特定类型的产品。
我一直在回顾工厂设计模式的优势,但对于这种特定情况,我看不出 B 优于 A 的任何优势。我是否遗漏了什么?
【问题讨论】:
-
我从未见过工厂被子类化。每种类型都有方法。但是,如果您想要一组静态的 Product 对象,工厂更适合在运行时创建这些对象
-
你的意思是像一个工厂,它的方法返回一个包含 8 个产品的集合?如果它返回一个集合而不是单个对象,它是否被认为是正确的工厂设计模式?
-
"我将有 8 种类型的产品,它们仅在数据结构的内容上有所不同,没有别的。"数据结构是什么?如果它只是一个聚合(例如,Array、LinkedList 等),那么你不需要 8 个子类。
-
它是另一个类的对象的某种集合。因此,如果没有产品子类,您是否建议选项 B?或者你有什么建议?
标签: oop design-patterns constructor factory factory-pattern