기본 추상 클래스 인 BaseAddress에서 다음과 같은 자식 클래스 CentreAddress와 VenueAddress를 확장했습니다.단순한 팩토리 패턴 - 디자인 타임에 확장 된 구체적인 인스턴스의 속성에 값을 할당
내 Center 및 Venue 클래스에 대한 CentreAddress 및 VenueAddress의 구체적인 인스턴스를 작성하기 위해 간단한 Factory, AddressFactory를 구현할 생각이었습니다.
내 구현이지만 디자인 타임에 확장 된 구체 인스턴스의 속성에 값을 할당 할 수 없습니다.
런타임에 정확한 구체 인스턴스가 생성됩니다.
Centre.Address 및 Venue.Address의 반환 유형을 변경할 수 있습니다. 그러나 이것은 확실한 클래스를 참조하는 응용 프로그램의 유일한 부분 인 AddressFactory를 갖는 이점을 없애 줍니까?
내 구현이 정확하고 패턴이 잘 나타나지 않습니다. 즉, 필요하지 않을 때 패턴을 채우려 고합니까? 아래 코드.
는Sub Main()
Dim centre1 = New Centre
centre1.Name = "Centre 1"
centre1.Address.Line1 = "Address Line 1"
centre1.Address.Line2 = "Address Line 2"
'centre1.Address.Line3 = "Address Line 3" not allowed
Dim venue1 = New Venue
venue1.Name = "Venue 1"
venue1.Address.Line1 = "Address Line 1"
venue1.Address.Line2 = "Address Line 2"
'venue1.Address.County.Name = "Bath and NE Somerset" not allowed
End Sub
Public Class CentreAddress
Inherits BaseAddress
Public Property Line3 As String
End Class
Public Class VenueAddress
Inherits BaseAddress
Public Property County As County
End Class
Public Class County
Public Property Name As String
End Class
Public Class Centre
Private m_address As BaseAddress
Public Property Name As String
Public ReadOnly Property Address As BaseAddress
Get
If m_address Is Nothing Then
m_address = AddressFactory.CreateAddress(Me)
End If
Return m_address
End Get
End Property
End Class
Public Class Venue
Private m_address As BaseAddress
Public Property Name As String
Public ReadOnly Property Address As BaseAddress
Get
If m_address Is Nothing Then
m_address = AddressFactory.CreateAddress(Me)
End If
Return m_address
End Get
End Property
End Class
Public Class AddressFactory
Public Shared Function CreateAddress(objectType As Object) As BaseAddress
If TypeOf objectType Is Venue Then
Dim venueAddress As New VenueAddress With {.County = New County}
Return venueAddress
ElseIf TypeOf objectType Is Centre Then
Return New CentreAddress
Else
Return New VenueAddress
End If
End Function
End Class
어떤 오류는 centre1.Address을 설정하려고 할 때 당신이 받고 있습니다. Line3? –
Type BaseAddress에 Line3이라는 속성이 없다는 메시지를받는 것 같습니다. –