在GridWorld中扩展GUI中的一个类而不更改使用它的其他类

时间:2013-01-30 04:57:24

标签: java extends performance gridworld

我想更改GridWorld GUI的DefaultDisplay类,以便我可以在运行期间更改actor的图像,因为我正在使用代码的jar文件,所以我创建了一个子类{{1 } CustomDisplay

但是,由于创建子类会改变名称,因此我必须创建使用DefaultDisplay的类的子类,以便更新它们以使用DefaultDisplay而不是CustomDisplay }。例如,我必须创建一个名为DefaultDisplay的{​​{1}}的子类,而不是:{/ p>

DisplayMap

说了这个:

CustomMap

然后使用private Display defaultDisplay = new DefaultDisplay(); 的任何其他类都必须更改为使用private Display customDisplay = new CustomDisplay(); 。制作所有这些类的子类似乎非常低效,因为它们使用了我改变的类。

是否可以设置DisplayMap而不是CustomMap,因此我只需更改一个类?

注释

  1. 我正在讨论的课程不在常规javadoc,但可以找到here
  2. 我查看了Extending GridWorld&发现了很多信息,但没有任何可以帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

这个问题似乎是陈旧的,但我认为一般性答案可以帮助任何找到它的人。

问题是关于GridWorld,一个用于教学的简单框架。

OP希望进行特定更改,通过引入新的显示类来解决未说明的问题,但不能更改现有的类。因此,问题变成了如何引入新的显示类?

应用OO思考。框架是否支持引入新的显示类? 我们应该检查文档,如果失败,请检查框架的公共类接口:是否有设置显示的方法?我们可以检查网格,演员,以及使用它们或使用它们的其他人。

尽管OP说的是,但有一个明确的声明(@Andrew Thompson所说)解决了这个要求:

“渲染算法如下:

  1. 检查是否有一个类,其名称是添加了后缀Display的类的名称,并实现了info.gridworld.gui。 显示界面。如果是这样,则调用其draw方法。这与MBS案例研究中使用的机制相同。 (如果你决定提供这样一个类,你应该扩展自动处理缩放和旋转的便利类info.gridworld.gui.AbstractDisplay。)“
  2. 这就是这个问题所需要的。

    有几个“学习”。

    1. 如果您正在阅读看似相关的文档(在这种情况下它会提到Display界面),而您对此不了解,那么请进行调查,直到您理解为止。

    2. 如果您对问题解决方案的想法遇到困难,那么在投入太多精力之前,请返回重新评估引导您的路径中的分支。

    3. 你的老师(在如此低级别的科目中)没有设定不可能完成的任务(除非他们做了大量的事情)。所以2.适用。

    4. 这与调试有关:我们最难的错误来自我们不知道的假设。我们可能是出于懒惰思维或无知而制造出来的。因此,重新审视思考并了解所涉及的技术和技术。在尝试更改之前了解正在发生的事情。