是否有特定的设计模式描述了提供非抽象默认实现的场景,该实现使用空的 NO-OP 实现实现接口上的所有或部分方法。这样做的目的是减轻子类实现它们自己可能不需要/使用的方法的负担:
public interface MyInterface {
public void doThis();
public void doThat();
public void done();
}
public class MyClass implements MyInterface {
public void doThis() {
// NO-OP
}
public void doThat() {
// NO-OP
}
public void done() {
// Some standard implementation
}
}
public class MuSubClass extends MyClass {
public void doThat() {
// Subclass only cares about doThat()
}
}
我已经看到这种模式多次使用,包括SAX 框架中的 Java 的 DefaultHandler和MouseAdapter。在某些情况下,此类类被命名为适配器,但我的印象是适配器模式在两个不同的接口之间进行转换。
鉴于在这些情况下,只有一个已声明的接口被转换为该接口的未定义子集——我不清楚这如何符合适配器模式的精神。
此外,鉴于某些方法可能具有实现,并且 NullObject 传统上是单例,我也不太明白这如何遵守NullObject 模式。