我经常发现自己创建它使用这种形式(A)类:命名约定非虚拟和抽象方法
abstract class Animal {
public void Walk() {
// TODO: do something before walking
// custom logic implemented by each subclass
WalkInternal();
// TODO: do something after walking
}
protected abstract void WalkInternal();
}
class Dog : Animal {
protected override void WalkInternal() {
// TODO: walk with 4 legs
}
}
class Bird : Animal {
protected override void WalkInternal() {
// TODO: walk with 2 legs
}
}
而不是这样的形式(B):
abstract class Animal {
public abstract void Walk();
}
class Dog : Animal {
public override void Walk() {
// TODO: do something before walking
// custom logic implemented by each subclass
// TODO: walk with 4 legs
// TODO: do something after walking
}
}
class Bird : Animal {
public override void Walk() {
// TODO: do something before walking
// custom logic implemented by each subclass
// TODO: walk with 2 legs
// TODO: do something after walking
}
}
正如你可以看到,形式A的好处在于,每次实现子类时,都不需要记住包含初始化和终结逻辑。这比形式B更不容易出错。
什么是命名这些方法的标准惯例?
我喜欢命名公共方法Walk
,因为我可以打电话Dog.Walk()
,这比Dog.WalkExternal()
好看。但是,我不喜欢我为受保护的方法添加后缀“Internal”的解决方案。我在寻找更加标准化的名字。
顺便说一句,有这个设计模式的名称?
好问题;我也一直这样做。 – 2010-04-08 04:56:29
@罗伯特:你在调用什么内部方法? – Senseful 2010-04-08 05:06:04
Impl在WalkImpl ....没有比内部更好。 – 2010-04-08 05:54:00