Proxy パターン
なおこ(・∀・)さんのサイトではこちら。
代理オブジェクトが間に入り、実際のオブジェクトと変わらない動きをすると。間に一つクラスが入ることにより実際のオブジェクトは必要なときだけ使用する、といった実装になるわけですね。
なんだか面白そうなので自分でも書いてみました。
[Visual Basic]
Imports System
Imports System.Collections.Generic
Public Interface IRunking
Function GetMusic(ByVal runk As Integer) As Music
End Interface
Public Class Proxy
Implements IRunking
Private _knownRunking As Dictionary(Of Integer, Music)
Private _olicon As OliconRunking
Public Sub New()
Me._knownRunking = New Dictionary(Of Integer, Music)
Me._olicon = New OliconRunking
End Sub
Public Function GetMusic(ByVal runk As Integer) As Music Implements IRunking.GetMusic
If Me._knownRunking.ContainsKey(runk) Then
Return Me._knownRunking.Item(runk)
Else
Dim realData As Music = Me._olicon.GetMusic(runk)
Me._knownRunking.Add(runk, realData)
Return realData
End If
End Function
End Class
Public Class OliconRunking
Implements IRunking
Private _runking As Dictionary(Of Integer, Music)
Public Sub New()
Me._runking = New Dictionary(Of Integer, Music)
' 2007 年 01 月 14 日 付
Me._runking.Add(1, New Music("千の風になって", "秋川雅史"))
Me._runking.Add(2, New Music("しるし", "Mr.Children"))
Me._runking.Add(3, New Music("宙船(そらふね)/do! do! do!", "TOKIO"))
Me._runking.Add(4, New Music("千の夜をこえて", "Aqua Timz"))
Me._runking.Add(5, New Music("僕らの街で", "KAT-TUN"))
Me._runking.Add(6, New Music("黒い涙", "ANNA TSUCHIYA inspi'NANA(BLACK STONES) "))
Me._runking.Add(7, New Music("Man and Woman", "CHAGE and ASKA"))
Me._runking.Add(8, New Music("関風ファイティング", "関ジャニ∞(エイト)"))
Me._runking.Add(9, New Music("Here & There", "CHAGE and ASKA"))
Me._runking.Add(10, New Music("ぼくはくま", "宇多田ヒカル"))
End Sub
Public Function GetMusic(ByVal runk As Integer) As Music Implements IRunking.GetMusic
If Me._runking.ContainsKey(runk) Then
Return Me._runking.Item(runk)
Else
Return Nothing
End If
End Function
End Class
Public Class Music
Private _title As String
Public ReadOnly Property Title() As String
Get
Return _title
End Get
End Property
Private _artist As String
Public ReadOnly Property Artist() As String
Get
Return _artist
End Get
End Property
Public Sub New(ByVal title As String, ByVal artist As String)
Me._title = title
Me._artist = artist
End Sub
End Class