一、定義
在設定環境中,定義一種規則或者語法,通過直譯器來解釋規則或者語法的含義.
二、例項:將 二十一 —> 21
2.1 設定我們的環境 Context
public class Context { public string Input { get; set; } public int Output { get; set; } }
2.2 根據語法來解釋
抽象直譯器:
public abstract class Interpreter { public string FlagStr { get; set; } public int Num { get; set; } public abstract int Interpret(Context context); }
具體解釋:
二=2
public class Two : Interpreter { public Two() { FlagStr = "二"; Num = 2; } public override int Interpret(Context context) { return Num; } }
一=1
public class One : Interpreter { public One() { FlagStr = "一"; Num = 1; } public override int Interpret(Context context) { return Num; } }
十=*10
public class Tenfold : Interpreter { public Tenfold() { FlagStr = "十"; Num = 10; } public override int Interpret(Context context) { return context.Output*Num; } }
再封裝一下:
public class InterpretPrivoder { public int FormatStr(Context context) { foreach (char c in context.Input) { switch (c) { case '一': context.Output += new One().Interpret(context); break; case '二': context.Output += new Two().Interpret(context); break; case '十': context.Output = new Tenfold().Interpret(context); break; } } return context.Output; } }
其中,未結束符為二和一,結束符為十
客戶端:
//------------------------直譯器模式----------------------- Interpreter.Context interpretContext = new Interpreter.Context(); interpretContext.Input = "二十一"; Interpreter.InterpretPrivoder interpreter = new Interpreter.InterpretPrivoder(); interpreter.FormatStr(interpretContext); Console.WriteLine(interpretContext.Output); Console.ReadKey();
結果:
三、總結
直譯器模式,實在一種模式經常出現,並不斷變化。我們可以使用直譯器。
缺點就是容易子類膨脹