簡體   English   中英

如何在類列表中實現不常用的方法/接口?

[英]How to implement infrequent method/interface in list of classes?

假設我有一個名為Element的類,它是所有元素的超類; WallDoorPickupTable等。現在假設,某些此類可以由Player的實例通過use()方法與其他子類進行交互,而其他子類則不能。 所有元素中只有1-5%可用。 我將如何以面向對象的方式實現這一目標?

我考慮了以下選項:

  • 元素可以包含可覆蓋的use()方法,每個子類都可以覆蓋該方法。 這很容易實現,但要求玩家在與世界互動時從許多對象中檢查use()方法。
  • 一些子類可以實現一個Usable接口,該接口定義了use()方法。 這要求程序至少跟蹤兩個列表,一個用於Element ,一個用於Usable
  • 元素使用一個列表,並使用instanceof運算符檢查可用性。 真?

有誰有更好的解決方案?

如果可用性取決於類,而不取決於對象的實例,則可以在基類中簡單地提供以下兩個方法:

public boolean isUsable() {
    return false;
}

public void use() {
    if (isUsable()) {
        throw new IllegalStateException("subclass must override use() if it's usable");
    }
    throw new UnsupportedOperationException("Not usable I told you");
}

現在,想要使用的子類只需重寫這兩個方法。

如果可用性取決於實例,則可以使用標志:

private final boolean usable;

protected Element(boolean usable) {
    this.usable = usable;
}

public final boolean isUsable() {
    return usable;
}

public final void use() {
    if (!isUsable()) {
        throw new UnsupportedOperationException("Not usable I told you");
    }
    doUse();
}

protected void doUse() {
    throw new IllegalStateException("subclass that can be usable must override doUse");
}

暫無
暫無

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

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