【发布时间】:2011-05-26 19:07:01
【问题描述】:
有时当我扩展我自己的一个类时,我想(为了子类的目的)在超类中的方法中间“注入”一两行代码。
在这些情况下,我有时会添加对空保护方法的调用以供子类覆盖。
public void superClassMethod() {
// some fairly long snippet of code
doSubclassSpecificStuff();
// some other fairly long snippet of code
}
// dummy method used for overriding purposes only!
protected void doSubclassSpecificStuff() {
}
当我在同一个班级多次这样做时,我必须说它看起来很尴尬/丑陋,所以我的问题:
- 这种为子类“开放”以在被认为是良好做法的方法中间“注入”代码的方式是否合适?
- 模式(反模式?)叫什么?
- 是否已在任何知名的 API/库中使用过? (请注意,我说的是非抽象类。)
- 还有更好的选择吗?
我能想出的唯一选择是使用类似命令模式的东西并有一个setMiddleOfMethodHandler(SomeRunnableHandler),然后调用handler.doSubclassSpecificStuff() 而不是虚拟方法。但在我看来,它有一些缺点,例如无法访问受保护的数据。
【问题讨论】:
-
我一直这样做,特别是对于“框架”,超级类负责处理大量的家务/管道任务。我认为这是一件好事,所以我很好奇你会得到什么回应。
标签: java inheritance oop