美文网首页
设计模式-interpreter

设计模式-interpreter

作者: Wu杰语 | 来源:发表于2020-12-30 07:20 被阅读0次

    解释器模式,看起来平时用的不多,升华一点,我们在编程时比较高的境界是先构造语义,用来DSL来描述业务,然后用某个计算模型来实现语义。到这个层次,可以想一下,使用场景并不少,而且是比较高明、高层次、高难度的使用。

    实现语义有两种方法,一种是编译器,一种是解释器,这就是SICP的第四第五章,武林秘籍的最高层次。

    我们一般人到不了那个层次,但是学习简单一点的模式是没有问题的。例如说实现加减法的解释器。

    例子

    public interface Expression { 
      long interpret();
    }
    
    public class NumExpression implement Expression {
      private long num;
      public NumExpression(String s) {
        this.num = Long.parseLong(s);
      }
      long interpret() {
        return this.num;
      }
    }
    
    public class AddExpression implement Expression {
      private Expression left;
      private Expression right;
      public NumExpression(Expression left, Expresson right) {
        this.left = left;
        this.right = rigth;
      }
      long interpret() {
        return this.left.interpret() + this.right.interpret();
      }
    }
    
    public class SubExpression implement Expression {
      private Expression left;
      private Expression right;
      public NumExpression(Expression left, Expresson right) {
        this.left = left;
        this.right = rigth;
      }
      long interpret() {
        return this.left.interpret() - this.right.interpret();
      }
    }
    
    public class Application {
      public static void main(string[] argc) {
         String exp = "3 + 2 + 1";
         Stack<Expression> expressions = new Stack<Expression>();
         Stack<String> operators = new Stack<String>();
         // 解析式子 [Expression("3"), Expression("2"), Expression("1")] ["+", "-"]
         
         while (!operator.empty()) {
           String oper = operator.pop();
           Expression left = expresions.pop();
           Expression right = expresions.pop(); 
           if (oper == "+") {
               expressions.push(new AddExpresion(left, right));
           } else {
               expressions.push(new SubExpression(left. right));
           }
      }
      if (expressions.empty()) {
        // 抛出异常  
      }
      Long result = expressions.pop().interpret();
    

    这就是一个比较简单的解释器

    小结

    解释器模式虽然比较少用,但是在一些领域语言驱动设计的方式中,是一种比较实用的设计实现方式。

    相关文章

      网友评论

          本文标题:设计模式-interpreter

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