У меня есть абстрактный базовый класс T
, из которого классы A
и B
унаследовать. Теперь у меня есть операция (на T
), которая требует немного другой реализации в A
и B
, но большая часть кода такая же. Позвольте мне дать вам пример: Есть две возможности реализовать что-то вроде .Clone
метода:OO Pattern: общая работа между абстрактным базовым классом и подклассами
Public MustInherit Class T
Protected MustInherit Function _DoClone() As T
Public Function Clone() As T
Dim clone = Me._DoClone() ' do the subclass-specific stuff '
... ' do the shared stuff '
End Function
End Class
Public Class A
Inherits T
Protected Overrides Function _DoClone() As T
... ' do the subclass-specific stuff '
End Function
End Class
или
Public MustInherit Class T
Protected Sub _DoClone(clone As T)
... ' do the shared stuff '
End Function
Public MustInherit Function Clone() As T
End Class
Public Class A
Inherits T
Public Overrides Function Clone() As T
Dim clone = ... ' do the subclass-specific stuff '
Me._DoClone(clone)
End Function
End Class
(пример в VB.NET, но тот же вопрос относится и к C# , Java и т.д.)
Мои вопросы:
- есть вариант, который явно предпочтительным?
- Это хорошо известный шаблон, который имеет имя (чтобы я мог делать больше исследований)?
- Существуют ли устоявшиеся соглашения об именах для таких ситуаций (например, для
_Do...
)?
Определенно первый метод и шаблон шаблона метода, упомянутый Антоном Гоголевым. –