一、定义
在设定环境中,定义一种规则或者语法,通过解释器来解释规则或者语法的含义.
二、实例:将 二十一 —> 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();
结果:
三、总结
解释器模式,实在一种模式经常出现,并不断变化。我们可以使用解释器。
缺点就是容易子类膨胀