簡體   English   中英

Java中關於實例化對象的設計題

[英]Design question about instantiating objects in Java

我的回答可能很慢,但我有一個設計問題希望得到一些建議:

我正在嘗試為我玩的手機游戲制作戰斗模擬器。 我有一個代表每個英雄的 class,它實現了他們特定能力的邏輯。 它們繼承了一個抽象的 Hero class,它本身繼承了一個抽象的 Unit class。

單元 class 保存狀態和效果(buff 和 debuffs),Hero 有能力邏輯的抽象方法,各個英雄實現這些方法。

現在我想不通的部分是我有一個非常基本的 GUI,你可以從下拉列表中 select 最多四個英雄。 然后我需要一種方法來創建我的程序的 rest 所需的特定英雄 class 對象,基於它們 select。

但我顯然不能將下拉值用作 class 類型,所以我是否被迫為它們全部或其他東西制作一些大型開關盒? 或者有沒有我沒想到的人們使用的更優雅的方法?

最終會有超過 100 個獨特的英雄(以及因此類),而我只是在為如何有效地僅為在我的下拉菜單中選擇的對象創建對象而苦苦掙扎。 制作完成后,我計划將它們添加到 Hero 類型的小數組(它們的超類)中,然后僅通過索引引用。

這只是如何填充陣列導致我卡住了。

很抱歉漫無邊際,但希望這能很好地解釋事情。 為了清楚起見,我將這一切都寫在 Java 中,並使用 JavaFX 作為 GUI。

我需要一種方法來創建我的程序的 rest 所需的特定英雄 class 對象,基於它們 select

我不知道你是否知道 SQL,使用 SQL 數據庫執行此操作的方法是為英雄提供 1 個表,為所有英雄對象提供 1 個表,然后是一個同時引用英雄和英雄的表. 然后你可以通過查詢所有英雄對象

select Object from HeroObjectTbl where hero = ??

如果你不知道SQL,你知道如何使用其他數據庫技術嗎? IMO你真的需要一個數據庫

您可以創建一個函數數組(有點),其中每個 function 創建一個不同的英雄。

public interface HeroCreator() {
  public Hero create();
}

然后,在游戲開始時實例化數組:

  (...)
  public HeroCreator[] creators = {
    new HeroCreator() { 
      @override public void create() {
        return new Hero1();
      }
    },
    new HeroCreator() { 
      @override public void create() {
        return new Hero2();
      }
    },
    (...)
  };
  (...)

最后,您只需從 combobox 那里得到一個 position i 並在該 position 處致電創建者:

i = (...)

Hero hero = creators[i].create();

免責聲明:我沒有檢查代碼是否有錯別字和其他錯誤,但邏輯是這樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM