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 | 
 
 
 |