不是为了增加一行代码而重写一个方法吗?
Not rewriting a method just to add a single line of code?
这种情况一次又一次发生在我身上:我们有 class CLS
和 init
这样的方法:
init {
// do A
// do B
// do C
}
现在,在某些情况下,我们需要在 B
和 C
之间执行 X
。制作 CLS
的子 class 并重写整个 init
方法并插入 X
对我来说似乎不是一个好的解决方案(它与 DRY 相反), 有没有我没有想到的更好的解决方案?
请注意,A
、B
和 C
是小代码片段,会进行一些小调整,例如调整 UI,因此将它们放在单独的方法中可能不是一个好主意。我目前正在 JavaScript 编码,但我认为这个问题也适用于其他 PL。
我们通常向父 class 添加挂钩,我们希望在其中进行扩展。我不记得它叫什么了。也许是 template method pattern?
class Foo {
init() {
console.log("A");
console.log("B");
this.doX();
console.log("C");
}
doX(){}
}
class Bar extends Foo {
doX() {
console.log("X");
}
}
new Bar().init();
这种情况一次又一次发生在我身上:我们有 class CLS
和 init
这样的方法:
init {
// do A
// do B
// do C
}
现在,在某些情况下,我们需要在 B
和 C
之间执行 X
。制作 CLS
的子 class 并重写整个 init
方法并插入 X
对我来说似乎不是一个好的解决方案(它与 DRY 相反), 有没有我没有想到的更好的解决方案?
请注意,A
、B
和 C
是小代码片段,会进行一些小调整,例如调整 UI,因此将它们放在单独的方法中可能不是一个好主意。我目前正在 JavaScript 编码,但我认为这个问题也适用于其他 PL。
我们通常向父 class 添加挂钩,我们希望在其中进行扩展。我不记得它叫什么了。也许是 template method pattern?
class Foo {
init() {
console.log("A");
console.log("B");
this.doX();
console.log("C");
}
doX(){}
}
class Bar extends Foo {
doX() {
console.log("X");
}
}
new Bar().init();