美文网首页
设计模式之解释器模式

设计模式之解释器模式

作者: 老羊_肖恩 | 来源:发表于2017-06-14 13:41 被阅读58次

    解释器模式的定义

    解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,在现在项目中使用较少。其定义如下:Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentence in the language. 即:给定一门语言,定义它的语法的一种表示,并定义一个解释器,该解释器用来解释语言中的句子。
    解释器模式的通用类图如下:


    解释器.png
    • AbstractExpression 抽象解释器。具体的解释任务由实现类完成。具体的解释器分别由TerminalExpression和Non-terminalExpression完成。
    • TerminalExpression 终结符表达式。实现与文法中的元素相关联的解释操作。
    • Non-terminalExpression 非终结符表达式。语法中的每条规则对应于一个非终结符表达式。
    • Context 环境角色。
      其通用代码如下:
    import java.util.ArrayList;
    import java.util.List;
    
    //抽象表达式
    public abstract class Expression{
        //解析任务
        public abstract Object interpret(Context ctx);
    }
    
    //终结符表达式
    public class TerminalExpression extends Expression{
    
        //进行文法处理
        @Override
        public Object interpret(Context ctx) {
            return null;
        }
        
    }
    //非终结符表达式
    public class NonTerminalExpression extends Expression{
        
        public NonTerminalExpression(Expression...expressions){
            
        }
        
        //进行文法处理
        @Override
        public Object interpret(Context ctx) {
            return null;
        }
        
    }
    
    //
    
    public class Context{
        
    }
    
    //客户端
    public class InterpreterClient{
        public static void main(String[] args) {
            Context ctx = new Context();
            List<Expression> list = new ArrayList<Expression>();
            list.forEach(e->{
                //进行语法判断
                e.interpret(ctx);
            });
        }
    }
    

    解释器模式的应用

    解释器模式的优点

    解释器是一个简单的语法分析工具,最显著的特点就是扩展性。修改和扩展语法只需要修改或扩展相应的非终结表达式即可。

    解释器模式的缺点

    • 类膨胀。非终结表达式可能很多,导致不便维护。
    • 解释器模式采用递归调用方法。
    • 效率问题。

    解释器模式的使用场景

    • 重复发生的问题。
    • 一个简单语法需要解释的场景。

    《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记

    相关文章

      网友评论

          本文标题:设计模式之解释器模式

          本文链接:https://www.haomeiwen.com/subject/hhhafxtx.html