假设我有一个名为 Element 的类,它是各种元素的超类; 墙,门,取件,表等等。现在假设,其中一些子类可以通过以下方式进行交互通过 use()方法的播放器的实例,但其他人则不能。只有1-5%的元素可以使用。我将如何以面向对象的方式实现它?
我考虑过以下几种选择:
有没有人有更好的解决方案?
答案 0 :(得分:1)
如果可用性取决于类,而不取决于对象的实例,则可以在基类中简单地提供这两种方法:
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");
}