我也设计模式——16.Interpreter

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);
            }
        }
    }

客户端的调用如下:
            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);

这个模式我想了很久,不适合使用委托实现,会搅乱原先清晰的架构。

posted @ 2007-10-23 22:41  包建强  Views(1003)  Comments(1Edit  收藏  举报