我有一个抽象类Artifact和2个类Requirement and Feature,它们是Artifact的子元素。 这将是实现一个方法的最佳方法,其中输入是artifactID,输出将是Artifact的正确子类。
我的代码就是这个:
Public MustInherit Class Artifact
Public ReadOnly ID As String
Public Sub New(ID As String)
Me.ID = ID
End Sub
Public Shared Function [New](ID As String) As Artifact
If ID.StartsWith("FE_") Then
Return New Feature(ID)
ElseIf ID.StartsWith("RQ_") Then
Return New Requirement(ID)
Else
Throw New InvalidArtifactIDException("ID does not match to a known Artifacttype")
End If
End Function
End Class
Public Class Feature
Inherits Artifact
Public Requirements As List(Of Requirement)
Sub New(ByVal FeatureID As String)
MyBase.New(FeatureID)
End Sub
End Class
Public Class Requirement
Inherits Artifact
Public Name As String
Sub New(ByVal ReqID As String)
MyBase.New(ReqID)
End Sub
End Class
我不知道该怎么想"覆盖" " New" -Keyword as methodname但它是我的第一个想法^^
感谢您的回复!
答案 0 :(得分:2)
通常,基类(Artifact)甚至不应该知道派生类(Feature和Requirement)存在。 Artifact的构造函数应仅处理其自己的字段和属性的初始化,而派生类处理特定于那些的任何内容(参见"最少知识原则"以及相关原则here)。 / p>
正如@Tim所提到的,这将是Factory pattern的完美候选人。听起来你已经走上了正确的轨道 - 你可以将它实现为一个名为ArtifactFactory的新类,其中包含GetArtifact()方法(包含代码示例中[New]方法的逻辑),并可选择添加如果你也需要GetFeature()和GetRequirement()方法。
如果你有时间,请进一步阅读: