簡體   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