GOF的定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
这个模式很少用到,我看过一个机器人指令的实现,使用了该模式。
两个子类的实现,TernimalExpression类是具体做事情的类;NonternimalExpression类是一个容器,它的interpret方法,负责遍历其内部的所有TernimalExpression对象:
public class TerminalExpression : AbstractExpression
{
public override void interpret(Context context)
{
//Do Something using context
}
}
public class NonterminalExpression : AbstractExpression
{
private ArrayList rg = new ArrayList();
public void AddExpression(AbstractExpression ex)
{
rg.Add(ex);
}
public override void interpret(Context context)
{
foreach (AbstractExpression ex in rg)
{
ex.interpret(context);
}
}
}
{
public override void interpret(Context context)
{
//Do Something using context
}
}
public class NonterminalExpression : AbstractExpression
{
private ArrayList rg = new ArrayList();
public void AddExpression(AbstractExpression ex)
{
rg.Add(ex);
}
public override void interpret(Context context)
{
foreach (AbstractExpression ex in rg)
{
ex.interpret(context);
}
}
}
客户端的调用如下:
Context context = new Context();
TerminalExpressionA a = new TerminalExpressionA();
TerminalExpressionB b = new TerminalExpressionB();
NonterminalExpression n = new NonterminalExpression();
n.AddExpression(a);
n.AddExpression(b);
n.interpret(context);
TerminalExpressionA a = new TerminalExpressionA();
TerminalExpressionB b = new TerminalExpressionB();
NonterminalExpression n = new NonterminalExpression();
n.AddExpression(a);
n.AddExpression(b);
n.interpret(context);
这个模式我想了很久,不适合使用委托实现,会搅乱原先清晰的架构。