Использование абстрактных методов:
Подклассы переопределяют абстрактный метод из базового класса.
abstract class Z {
abstract doSomethingElse();
doSomething(){
//main logic
doSomethingElse();
}
}
class A : Z {
doSomethingElse(){
//subclass logic
}
}
class B : Z {
doSomethingElse(){
//subclass logic
}
}
Вызов базы по соглашению:
Переопределить виртуальные методы из базового класса и вызвать базовый метод в начале
class Z {
doSomething(){
//main logic
}
}
class A : Z {
doSomething(){
base.doSomething()
//subclass logic
}
}
class B : Z {
doSomething(){
base.doSomething()
//subclass logic
}
}
Внедрение делегата:
Требуется делегат в конструкторе суперкласса.Вызовите делегата.
class Z {
delegate somethingDone
Z(_somethingDone){
somethingDone = _somethingDone
}
doSomething(){
//main logic
somethingDone()
}
}
class A : Z {
A() : base(onSomethingDone){
}
onSomethingDone(){
//subclass logic
}
}
class B : Z {
B() : base(onSomethingDone){
}
onSomethingDone(){
//subclass logic
}
}
Подписка на событие:
Запустите событие, когда действие произойдет.Другие классы подписываются на событие
class Z {
doSomething(){
//main logic
fireEvent("SomethingDone")
}
}
class A {
A(){
subscribeToEvent("SomethingDone", onSomethingDone)
}
onSomethingDone(){
//subclass logic
}
}
class B {
B(){
subscribeToEvent("SomethingDone", onSomethingDone)
}
onSomethingDone(){
//subclass logic
}
}