1、定义
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
该模式很好理解就是,目的就是解释。比如说世界上的各个地区和国家的汉字各不相同,但是需要表达的意思是相同的。同样描述吃饭的,中国叫吃饭,老外叫Eat...所以解释器模式是指,在程序中,一些符号或字符等需要在特定的条件下解释成这样,在另一情况下解释成那样。
2、角色
这个模式角色就一个解释器,
AbstractExpression——它的参数是需要解释的内容。
3、模型
抽象的解释操作类。
- public abstract class AbstractExpression
- {
- public abstract void Interpret(Context context);
- }
终结符表达式。
- public class TerminalExpression : AbstractExpression
- {
- public override void Interpret(Context context)
- {
- Console.WriteLine("终端解释器");
- }
- }
非终结符表达式。
- public class NonterminalExpression : AbstractExpression
- {
- public override void Interpret(Context context)
- {
- Console.WriteLine("非终端解释器");
- }
- }
除解释器外的一些变量
- public class Context
- {
- private string input;
- private string output;
- public string Input
- {
- get { return input; }
- set { input = value; }
- }
- public string Output
- {
- get { return output; }
- set { output = value; }
- }
- }
调用
- class Program
- {
- static void Main(string[] args)
- {
- Context context = new Context();
- List<AbstractExpression> list = new List<AbstractExpression>();
- list.Add(new TerminalExpression());
- list.Add(new NonterminalExpression());
- list.Add(new TerminalExpression());
- list.Add(new NonterminalExpression());
- foreach (AbstractExpression expression in list)
- {
- expression.Interpret(context);
- }
- Console.ReadLine();
- }
- }
结果
例子
将阿拉伯数字转为汉字。
继承抽象解释器。
- public class Expression:AbstractExpression
- {
- public override void Interpret(Context context)
- {
- string numStr = "0123456789";
- string chineseStr = "零一二三四五六七八九";
- char[] c = context.Input.ToCharArray();
- for (int i = 0; i < c.Length; i++)
- {
- int index = numStr.IndexOf(c[i]);
- if (index != -1)
- {
- c[i] = chineseStr.ToCharArray()[index];
- }
- }
- context.Output = new string(c);
- Console.WriteLine(context.Output);
- }
- }
调用
- static void Main(string[] args)
- {
- Context context = new Context();
- List<AbstractExpression> list = new List<AbstractExpression>();
- context.Input = "589";
- list.Add(new Expression());
- foreach (Expression ex in list)
- {
- ex.Interpret(context);
- }
- Console.ReadLine();
- }
结果显示
代码:http://download.csdn.net/detail/yysyangyangyangshan/4149019