我經常發現自己創建它使用這種形式(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