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

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

  • 相关阅读:
    Docker++:Docker根据名称查询容器ID镜像ID并停止删除
    Jenkins++:Jenkins 部署 war 包到 tomcat8,报错
    Vue++:不同环境打包方式
    Linux++:实现SSH无密码登录
    Jenkins++:Job for jenkins.service failed because the control process exited with error code. See "systemctl st
    Linux++:常用依赖安装
    哈希法学习
    nodeJS笔记
    链表之环形链表
    双指针法数组三数之和
  • 原文地址:https://www.cnblogs.com/Jax/p/913946.html
Copyright © 2011-2022 走看看