我正在为我的 AP 计算机科学项目使用 Java 制作一个游戏。它是在游戏板上玩的,游戏板上有边界、内部空间,然后是一种特殊类型的内部空间。这三者各不相同,并且各自具有独特的行为,但它们都是相互关联的,就像它们都在游戏板上一样。
一旦空间被制作出来,它们就会保持不变——角色将处理所有的移动和适合他们所在空间的适当行为。
目标是将所有这些都放在一个二维数组中,我不确定如何最好地实现它。我考虑了以下几点
- 使用空或接近空的接口(interface)或抽象类,其中常规空间和特殊空间继承自抽象空间类,并且空间类和边界类都实现该接口(interface)或扩展父抽象类
- 将它们全部声明为同一类型,并根据其类型定义不同的行为。
- 使其成为一个二维数组列表,类型为
Object
。
所有这些看起来都有点老套。处理这个问题的适当方法是什么?
最佳答案
#1 绝对应该是您的首选,而且它一点也不黑客。我可能会选择某种名为 BoardSquare 或其他名称的抽象类,并让所有内容都继承自该类。
类接近空,甚至空的事实本质上并不是坏事(尽管如果类是空的,它实际上应该是一个接口(interface))。 Java 8 中 lambda 实现背后的主要动机之一是类/接口(interface)只是一个函数的包装器(考虑 comparator 或 closeable )。而且,谁说它应该是空的?我可以想到一些潜在的常见方法:Square.moveTo()
、moveFrom()
、actOn()
、convert()
、status()
toString()
等。
#2 和 #3 可以工作,并且在技术上并不黑客,但它们使您的代码很难维护/升级。添加新的方形类型时会发生什么?当你想改变一个人的行为而不是其他人的行为时会发生什么?等等
关于java - 制作三个轻度相关类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771458/