[英]How to implement infrequent method/interface in list of classes?
假設我有一個名為Element的類,它是所有元素的超類; Wall , Door , Pickup , Table等。現在假設,某些此類可以由Player的實例通過use()方法與其他子類進行交互,而其他子類則不能。 所有元素中只有1-5%可用。 我將如何以面向對象的方式實現這一目標?
我考慮了以下選項:
有誰有更好的解決方案?
如果可用性取決於類,而不取決於對象的實例,則可以在基類中簡單地提供以下兩個方法:
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.