OO模式:抽象基类和子类之间的共享工作

Hei*_*nzi 4 .net language-agnostic oop

我有一个抽象的基类T,从中继承类AB继承.我现在(的操作T),这需要一个稍微不同的实现AB,但大部分的代码是一样的.让我举个例子:有两种.Clone方法可以实现类似方法:

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
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)

(示例在VB.NET中,但同样的问题适用于C#,Java等)

我的问题:

  • 有选择权显然是首选吗?
  • 这是一个众所周知的模式,有一个名称(这样我可以做更多的研究)?
  • 对于像这样的情况(即_Do...事情),是否有完善的命名约定?

Ant*_*lev 7

看起来像模板方法模式:

模板方法用于:

  • 让子类实现(通过方法重写)可能变化的行为
  • 避免代码中的重复:您在算法中查找通用代码,并在子类中实现变体
  • 控制在什么点允许子类化.