我也设计模式——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 包建强 阅读(645) 评论(0)  编辑 收藏 所属分类: Design Patterns

  回复  引用  查看    
#1楼 2007-10-24 08:37 | 半山旅客      
谢谢分享

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-10-26 16:04 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: