?? class1.cs
字號:
using System;
using System.Text;
using System.Collections;
//Context場境
class Context
{
private string input;
private int output;
public Context( string input )
{
this.input = input;
}
//屬性
public string Input
{
get{ return input; }
set{ input = value; }
}
public int Output
{
get{ return output; }
set{ output = value; }
}
}
//抽象表達式類
abstract class Expression
{
public void Interpret( Context context )
{
if( context.Input.Length == 0 ) return;
if( context.Input.StartsWith( Nine() ) )
{
context.Output += 9 * Multiplier();
context.Input = context.Input.Substring(2);
}
else if( context.Input.StartsWith( Four() ) )
{
context.Output += 4 * Multiplier();
context.Input = context.Input.Substring( 2);
}
else if( context.Input.StartsWith( Five() ) )
{
context.Output += 5 * Multiplier();
context.Input = context.Input.Substring( 2);
}
while( context.Input.StartsWith( One() ) )
{
context.Output += 1 * Multiplier();
context.Input = context.Input.Substring( 2 );
}
}
public abstract string One();
public abstract string Four();
public abstract string Five();
public abstract string Nine();
public abstract int Multiplier();
}
//核對千位的上文字,TerminalExpression終結符表達式類
class ThousandExpression : Expression
{
public override string One() { return "壹仟"; }
public override string Four(){ return "肆仟"; }
public override string Five(){ return "伍仟"; }
public override string Nine(){ return "玖仟"; }
public override int Multiplier() { return 1000; }
}
//核對百位上的文字,TerminalExpression終結符表達式類
class HundredExpression : Expression
{
public override string One() { return "壹百"; }
public override string Four(){ return "肆百"; }
public override string Five(){ return "伍百"; }
public override string Nine(){ return "玖百"; }
public override int Multiplier() { return 100; }
}
//核對十位上的文字,TerminalExpression終結符表達式類
class TenExpression : Expression
{
public override string One() { return "壹拾"; }
public override string Four(){ return "肆拾"; }
public override string Five(){ return "伍拾"; }
public override string Nine(){ return "玖拾"; }
public override int Multiplier() { return 10; }
}
//核對個位上的文字,TerminalExpression終結符表達式類
class OneExpression : Expression
{
public override string One() { return "壹圓"; }
public override string Four(){ return "肆圓"; }
public override string Five(){ return "伍圓"; }
public override string Nine(){ return "玖圓"; }
public override int Multiplier() { return 1; }
}
/// <summary>
/// 解釋器模式的應用測試
/// </summary>
public class InterpreterApp
{
public static void Main( string[] args )
{
string chinese = "壹仟伍百玖拾伍圓";
Context context = new Context( chinese );
//生成分析樹
ArrayList parse = new ArrayList();
parse.Add(new ThousandExpression());
parse.Add(new HundredExpression());
parse.Add(new TenExpression());
parse.Add(new OneExpression());
//逐步的解釋
foreach( Expression exp in parse )
exp.Interpret( context );
//輸出結果
Console.WriteLine( "{0} = {1}",
chinese, context.Output );
Console.Read();//按鍵退出,方便查看結果
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -