繁体   English   中英

OOP设计:如何决定程序流程和类负责方法(JSFML库)

[英]OOP design: How to decide program flow and class responsible for method (JSFML library)

我正在设计一个2D游戏来练习Java和面向对象编程(我正在使用JSFML库,如果有帮助的话),我对如何最好地设计以下内容表示怀疑:

我正在使用的库提供了由可见游戏元素(玩家,敌人,背景等)实现的Drawable界面。 我还有一个RenderWindow ,我将在其上绘制Drawable对象。

这里的东西,在RenderWindowdraw(Drawable d)绘制的方法Drawable在当前窗口对象,并且Drawable对象都有一个draw(RenderWindow r)绘制当前方法Drawable的对象RenderWindow传递。

如果他们做的基本相同,我应该使用哪一个? 为什么? 我应该考虑什么来决定? 我使用HashMap存储Drawable对象。 我应该通过RenderWindowDrawables在HashMap中或通过Drawables在HashMap中的RenderWindow 任何建议表示赞赏。

对你的问题的一行答案是
Java语言不支持双调度机制。

怎么做:库希望您覆盖这些方法,但绝不会调用它们。 我没有使用过这个库,但是从游戏引擎的一些经验来看,我猜应用程序会调用RenderWindow的绘图,它最终会调用所有Drawable的绘制方法。 (Drawables的收集将由RenderWindow维护。

原因: Java通过检查调用该方法的对象类(而不是通过检查引用)来动态调用该方法。 这被称为(您可能知道)动态调度。
但是方法的参数是通过仅检查引用(而不是通过作为参数传递的实际对象的类)来选择的。
在这里,通过强制动态调度两次(通过使两个方法用于相同目的),库开发人员间接实现了双重调度。

将来,您可能希望扩展Drawable和RenderWindow。 如果只有Drawable中的draw方法,则不能为RenderWindow的每个子项单独绘制。 双重调度解决了这个问题。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM