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
本文链接:https://my.lmcjl.com/post/20809.html
展开阅读全文
4 评论