需要设计/模式/结构帮助编写java'世界'

d33*_*33j 7 java

我一直想用Java编写一个简单的世界,但是我可以运行"世界",然后在以后添加新对象(在世界开始运行时不存在)(模拟/观察未来物体之间的不同行为).

问题是我不希望一旦它启动就停止或重启世界,我希望它运行一周而不必重新编译它,但是能够放入对象并重做/重写/删除/创建/随着时间的推移变异.

世界可以像10 x 10 x/y'位置'一样简单(想象棋盘),但我想需要某种刻度线过程来监控对象并给每个人(如果有的话)一个机会'行动' '(如果他们想).

示例:World.java在星期一编码并让它继续运行.然后在星期二我写了一个叫做的新课Rock.java(不动).然后我把它(以某种方式)放入这个已经运行的世界(它只是在10x10阵列中随机丢弃它并且从不移动).

然后在星期三我创建了一个新的类,Cat.java并将其放入世界,再次随机放置,但是这个新对象可以在世界各地移动(在某个单位时间内),然后在星期四我写了一个叫做Dog.java同样移动的类但是如果它位于邻居位置,则可以"操作"另一个对象,反之亦然.

这就是事情.我不知道我需要什么样的结构/设计来编写实际的世界类来知道如何检测/加载/跟踪未来的对象.

那么,关于你将如何做这样的事情的任何想法?

che*_*vim 0

如果您只关心添加类(而不是修改),那么我会这样做:

  • 有一个包含您需要Entity的所有业务方法的接口(insertIntoWorld()、、、isMovable()getName()getIcon()
  • 实体驻留有一个特定的包
  • 您的应用程序中有一个预定作业,每 30 秒列出一次包的类文件
  • 跟踪类以及任何新类尝试加载类并强制转换为Entity
  • 对于任何新加载的实例,Entity创建一个新实例并将其命名为insertIntoWorld().

您还可以跳过调度程序和自动发现的事情,并在其中World指定要加载的类名的位置有一个 UI 控件。

一些问题:

  • 您无法轻松更新Entity. 您很可能需要执行一些类加载器魔法
  • 您无法扩展Entity接口来添加新的业务方法,因此您必须遵守最初启动应用程序时使用的合同