我想想象两种不同的算法,它们决定了Java中一个平面中圆圈集合是否重叠:
有没有办法让一个vizualization类的对象“监听”算法类的一个对象,例如它可以看到算法何时在一对圆圈之间执行重叠检查并知道何时更新可视化?
其他例子: 我可以保持活动圆列表(与扫描线相交的那些)作为扫描线算法的变量,让另一个类(可视化类)获得该变量。但是,该类如何知道列表何时更新并且必须更新可视化?
这只是我想到的策略。也许还有更好的方法......
答案 0 :(得分:1)
也许阅读Observer模式可以帮助您:https://en.wikipedia.org/wiki/Observer_pattern
您可以实现java.util.Observer或为算法提供回调函数/对象。
您可以将观察者的任意数据交给观察者,足以让它确定算法何时执行重叠检查。
答案 1 :(得分:1)
我不确定这是否会对你有所帮助,但如果你不能改变算法的代码来支持观察者,那么一个(有趣的)选择就是研究面向方面的编程。 / p>
例如,在AspectJ中(例如参见http://en.wikipedia.org/wiki/AspectJ),您可以指定(使用称为“切入点”的地方)(称为“连接点”),其中应运行多个额外代码(称为“建议”) 。您可以使用它来检测算法执行的重叠检查,并在您认为合适时对其进行响应。
当然,以这种方式做事会涉及到使用AspectJ,所以只使用普通的Java是不可能的 - 但这可能是你想要研究的有趣内容。
答案 2 :(得分:0)
Update()
方法上显示它们的状态。Visualization.Update()
。 用(4)类构建“你的世界”而不是(1)进行可视化。