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

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

问题在于,我不希望在开始之前停止或重新启动世界,我希望它运行一周而不必重新编译它,但可以放入对象并重做/重写/删除/创建/随时间变化。

这个世界可能就像一个10×10的x / y'地点'阵列(想象棋盘)一样简单,但我想会需要某种ticktimer过程来监视对象并给每个对象(如果有的话) '(如果他们想的话)。

例如:我周一编写World.java ,并让它继续运行。 然后在星期二我写了一个名为Rock.java的新类(不移动)。 然后,我把它放到这个已经运行的世界中(它只是将它放置在10x10数组中的任意位置,并且永远不会移动)。

然后在星期三,我创建了一个名为Cat.java的新类,并将它放到了世界中,再次随机放置,但这个新对象可以在世界中移动(在某个单位时间内),然后在星期四我写了一个名为Dog.java的类Dog.java也可以移动,但如果它处于相邻位置,则可以“对另一个对象起作用”,反之亦然。

这是事情。 我不知道为了知道如何检测/加载/跟踪未来对象,我需要编写真实世界级的结构/设计。

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


我不知道是否有像这样的问题的模式/策略,但这是我的方法:

我打算将所有这些不同的类作为一些常见类(也许是WorldObject类)的对象,然后将它们的差异化特性放入单独的配置文件中。

创建
当你的程序运行时,它会定期检查那个配置文件夹中的新项目。 如果它看到一个新的配置文件存在(比如说Cat.config),那么它会创建一个新的WorldObject对象,并赋予它从Cat.config文件读取的特性,并将该新对象放入该世界。

突变
如果程序检测到这些项目的某个配置文件发生了变化,那么它会在World中找到该对象,编辑它的功能并重新显示它。

删除
当程序在文件夹中查找并发现配置文件不再存在时,它会从World中删除该对象,并检查该对象是如何影响所有其他对象的。


我不会在JVM本身上永远运行太多。 有太多的方法可能会失败(计算机故障,由于重复的类加载导致的意外的内存不足,永久性问题)。

相反,我会设计一个系统,可以可靠地坚持所涉及的每个对象的状态(最简单的方法:使每个对象可序列化,但这并不能真正解决版本控制问题)。

因此,作为第一步,我只是简单地实现一些很好的classloader-magic,让jar被“拖放”到将被动态加载的世界模拟中。 但是,一旦你达到了不再有效的地步(因为你需要修改世界本身,或者需要对某些对象进行不兼容的修改),那么你可以坚持这个状态,为新版本转出库并重新加载状态。

能够坚持这个状态还可以让您轻松地创建测试场景或使用不同参数重放场景。


看看OSGi--这个框架允许在运行时安装和删除软件包。

该框架是所谓bundle的容器,java库在jar文件中包含一些额外的配置数据。

你可以安装一个“世界”包并保持运行。 然后,过了一段时间,安装一个向世界贡献岩石或沙子的束。 如果您不再喜欢它,请禁用它。 如果您需要其他的岩石,请安装最新版本的同一束并激活它。

借助OSGi,您可以保持世界的旋转和围绕太阳运动。

参考实现是equinox


顺便说一句:“我不知道什么样的结构/设计” - 至少你需要为“地理定位对象”定义一个接口,否则你将无法放置并显示它。 但对于“世界”,它足以知道“在坐标x / y / z处有东西”,并且对于世界观察者来说,这个“某物”有一种“显示自身”的方法。

链接地址: http://www.djcxy.com/p/4575.html

上一篇: need design/pattern/structure help on coding up a java 'world'

下一篇: Bluetooth activation Alert dialog multiplication after screen rotation