1.演奏内容类( context)
Public Class PlayContext
Private _text As String
Public Property PlayText As String
Get
Return _text
End Get
Set(ByVal value As String)
_text = value
End Set
End Property
End Class
2.表达式类(AbstractExpression)
Public MustInherit Class Expression
Public Sub Interpret(ByVal context As PlayContext)
If context.PlayText.Length = 0 Then
Return
Else
Dim playKey As String = context.PlayText.Substring(0, 1)
context.PlayText = context.PlayText.Substring(2)
Dim playValue As Double = Convert.ToDouble(context.PlayText.Substring(0, context.PlayText.IndexOf(" ")))
context.PlayText = context.PlayText.Substring(context.PlayText.IndexOf(" ") + 1)
excute(playKey, playValue)
End If
End Sub
Public MustOverride Sub excute(ByVal key As String, ByVal value As Double)
End Class
3.‘音符类(TerminaIExpression)
Public Class Note
Inherits Expression
Public Overrides Sub excute(ByVal key As String, ByVal value As Double)
Dim note As String = ""
Select Case key
Case "C"
note = "1"
Case "D"
note = "2"
Case "E"
note = "3"
Case "F"
note = "4"
Case "G"
note = "5"
Case "A"
note = "6"
Case "B"
note = "7"
Case "P"
note = " "
End Select
Console.Write("{0} ", note)
End Sub
End Class
4.音符类(TerminaIExpression)
Public Class Scale
Inherits Expression
Public Overrides Sub excute(ByVal key As String, ByVal value As Double)
Dim scale As String = ""
Select Case Convert.ToInt32(value)
Case 1
scale = "低音"
Case 2
scale = "中音"
Case 3
scale = "高音"
End Select
Console.Write("{0} ", scale)
End Sub
End Class
5.音速类
Public Class Speed
Inherits Expression
Public Overrides Sub excute(ByVal key As String, ByVal value As Double)
Dim speed As String = ""
If value < 500 Then
speed = "快速"
Else
If value >= 1000 Then
speed = "慢速"
Else
speed = "中速"
End If
End If
Console.Write("{0}", speed)
End Sub
End Class
6.客户端代码
Module Module1
Sub Main()
Dim context As New PlayContext
Console.WriteLine("上海滩:")
context.PlayText = "T 500 O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 3 C 1 O 2 A 0.5 G 1 C 0.5 E 0.5 D 3 "
Dim expression As Expression = Nothing
While context.PlayText.Length > 0
Dim str As String = context.PlayText.Substring(0, 1)
Select Case str
Case "T"
expression = New Speed
Case "O"
expression = New Scale
Case "C"
expression = New Note
Case "D"
expression = New Note
Case "E"
expression = New Note
Case "F"
expression = New Note
Case "G"
expression = New Note
Case "A"
expression = New Note
Case "B"
expression = New Note
Case "P"
expression = New Note
End Select
expression.Interpret(context)
End While
Console.Read()
End Sub
End Module