Imports System
Imports System.Collections
Namespace DesignPatterns.Core.TemplateMethod
' XpValuesクラス
Public Class XpValues : Implements IEnumerable
Private _name As String
Private _values As ArrayList = New ArrayList
Private _formatter As TextFormatter
' プライベート・コンストラクタ
Private Sub New(ByVal name As String, ByVal formatter As TextFormatter)
Me._name = name
Me._formatter = formatter
End Sub
' 保持する「価値」をプレーン・テキスト形式で出力できるインスタンスを生成
Public Shared Function CreatePlainTextFormatableXpValues(ByVal name As String) As XpValues
Return New XpValues(name, New PlainTextFormatter)
End Function
' 保持する「価値」をHTML形式で出力できるインスタンスを生成
Public Shared Function CreateHtmlTextFormatableXpValues(ByVal name As String) As XpValues
Return New XpValues(name, New HtmlTextFormatter)
End Function
' 名前を取得する
Public ReadOnly Property Name() As String
Get
Return _name
End Get
End Property
' 「価値」の数を取得する
Public ReadOnly Property Count() As Integer
Get
Return _values.Count
End Get
End Property
' 「価値」を取得する
Default Public ReadOnly Property Item(ByVal index As Integer) As String
Get
Return _values(index).ToString()
End Get
End Property
' 「価値」を登録する
Public Sub Add(ByVal xpValue As String)
_values.Add(xpValue)
End Sub
' XpValues を反復処理できる列挙子を取得する
Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
Return _values.GetEnumerator()
End Function
' 保持する「価値」を出力する
Public Function Format() As String
Return _formatter.Format(Me)
End Function
End Class
End Namespace |
|