zoukankan      html  css  js  c++  java
  • 我也设计模式——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);

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

  • 相关阅读:
    单链表
    找最长最短字符串
    注解
    Json字符串
    java的反射机制
    java类的加载与加载器
    String StringBuilder StringBuffer
    查看运行某类时当前的进程状态
    迷宫小游戏
    类的初始化过程、super关键字与函数绑定
  • 原文地址:https://www.cnblogs.com/Jax/p/913946.html
Copyright © 2011-2022 走看看