2

也许标题不是很清楚。让我澄清一下我要完成的工作。

我必须基类:

  • 基本属性
  • 基本问题

BaseProperties 包含有关生成数学问题的数据。例如,在上图中,BasicAdditionProperties 包含 Addend1 和 Addend2,这两个对象知道生成值的范围以表示 BasicAdditionProblem。

所以,这只是一个想法。我想我应该将抽象类传递给工厂,而这个应该会产生问题(在本例中为 BasicAdditionProblem)。

我已阅读,建议将这些值作为基类传递。我的主要疑问是,当我将对象 BaseProperties 传递给工厂时,我是否必须一直转换对象?

或者我可以实施什么想法来模拟这种情况?还是我必须有一个静态工厂来维护并用作到具体工厂的映射?提前致谢。

在此处输入图像描述

4

2 回答 2

1

CreateProblem()BaseProperties类中定义一个抽象。此方法可用于一般性地允许每个具体的 Properties 子类提供其自己的 Factory 方法。

这类似于使用WebRequest子类的实例并调用GetResponse()它,然后它返回对应的子类WebResponse

这种分布式抽象工厂方法允许您轻松地将属性/问题对添加到系统中,因为映射两者的代码仅包含在这两个类中。


您还可以使用完整的抽象工厂实现,其中PropertyProblemFactory定义了 aCreateProperties()和 a CreateProblem()。因此,在您的示例中,您将AdditionFactory知道如何创建匹配集。但这会迫使您为每个属性/问题对定义一个附加类。当你有一个使用 current/selected 的类时,它也最有效,用它PropertyProblemFactory创建一个Properties,然后立即使用同一个PropertyProblemFactory工厂来创建匹配的Problem。一旦你放弃对工厂的引用而只引用了Properties,就很难重新定位正确的工厂来创建Problem. (这可以通过另一个将对象类型映射到工厂的类来解决,但复杂性会增加。所以我建议的第一种方法在这种情况下更好)。

于 2012-07-05T19:24:33.787 回答
0

有多种解决方案。这仅取决于您要如何对其进行编程。

抽象类中的抽象方法必须在从抽象类继承的所有类中处理。这样您就可以轻松地在工厂中调用抽象方法而无需强制转换。

但是,当您需要使用来自一个特定类的大量数据时,为它创建抽象方法是不明智的,您应该简单地转换对象。

所以这一切都取决于有多少类继承自 BaseProperties 以及这些类中有多少数据是相同的。

于 2012-07-02T00:44:49.907 回答