簡體   English   中英

我如何根據公共標識符(java)實例化不同的子類

[英]How can i instantiate a different subclass based on common identifier (java)

我有一個用於瓷磚的 class。

public abstract class Tile {
    public Position pos;
    public char chr;
}

以及許多擴展 tile 的不同類。 每個子類都有自己的標識符 char。 現在我有一個 function 接收一個字符和一個 position 並且需要創建並返回一個瓷磚子類的新實例,該實例適合給定 position 中的字符。 除了運行所有選項之外,是否有一種優雅的 OOP 方法可以做到這一點?

所以對我來說,使用這樣的標識符有點設計缺陷。

您可以在抽象 class 中添加類似以下內容:

public static Tile factory(char identifier, Position p) {
   Tile value = null;
   switch (identifier) {
      case `x`: {
        value = new XTile(p);
        break;
      }
      default {
        // throw an exception or provide a default
      }
   }
   return value
}

有效的 Java(第三版)第 21 項“首選 Class 層次結構而不是標記類”可能會為您的設計提供替代方案。

暫無
暫無

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

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