美文网首页
解释器模式

解释器模式

作者: Stroman | 来源:发表于2019-01-05 22:06 被阅读13次

总述

干嘛的呢?用来解释句子的。怎么解释呢?根据特定的语法来解释。该模式就是创建这么个解释器,根据这个特定的语法来解释该句子的。还是太抽象了,到底是干嘛的?很多问题遵循了特定模式,这种模式可以用相同的语法来表示,于是可以通过制造一种解释器来翻译这种语法,使之容易解决。

组成要素

  1. 终结符:就是不能再被拆分的语法单元。
  2. 非终结符:从终结符的概念可以推导出非终结符的概念,就是可以再被拆分的语法单元。于是可以知道,非终结符最终可以被拆分成终结符。
  3. 上下文:可以简单地理解为待翻译的内容。

示例

现在来做个一个加法——1+2,很简单,只不过用来说明一下问题而已,没别的意思。

大致过程

一个复杂的表达式属于非终结符,它接收一个完完全全没有被翻译的内容,然后逐层拆分,这有点类似于递归算法,就是把大问题拆分成小问题,最后再组合。

类图

类图.png

结果

结果是:3

Process finished with exit code 0

使用

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
        Expression expression1 = new Terminator(1);
        Expression expression2 = new Terminator(2);
        Expression expression3 = new NormalExpression(expression1,expression2);
        int result = expression3.explain(new Context("+"));
        System.out.println("结果是:" + result);
    }
}

抽象表达是借口

package com.company;

public interface Expression {
    public abstract int explain(Context context);
}

终结符

package com.company;

public class Terminator implements Expression {
    private int number;

    public Terminator(int number) {
        this.number = number;
    }

    @Override
    public int explain(Context context) {
        return this.number;
    }
}

非终结符

package com.company;

public class NormalExpression implements Expression {
    private Expression expression1;
    private Expression expression2;

    public NormalExpression(Expression expression1, Expression expression2) {
        this.expression1 = expression1;
        this.expression2 = expression2;
    }

    @Override
    public int explain(Context context) {
        if (!context.symbol.equals("")) {
            return this.expression1.explain(context) + this.expression2.explain(context);
        } else {
            return 0;
        }
    }
}

上下文

package com.company;

public class Context {
    public String symbol = "";

    public Context(String symbol) {
        this.symbol = symbol;
    }
}

多谢捧场

如果您觉得我的文章有价值,那么赏脸打赏一个,鄙人感激不尽。不过,不打赏看看也是好的,如果有不对的地方,还请您多多指正。


相关文章

  • 第5章 -行为型模式-解释器模式(终)

    一、解释器模式的简介 二、解释器模式的优缺点 三、解释器模式的实例

  • 17.解释器模式(行为型)

    解释器模式(行为型) 解释器模式很难学,使用率很低! 一、相关概念 1). 解释器模式概述 解释器模式是一种使用频...

  • 解释器模式

    一、解释器模式介绍 二、解释器模式代码实例

  • 解释器模式

    解释器模式 解释器模式的定义 解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案...

  • 行为型模式:解释器模式

    原文首发:行为型模式:解释器模式 十一大行为型模式之十:解释器模式。 简介 姓名 :解释器模式英文名 :Inter...

  • 折腾Java设计模式之解释器模

    解释器模式 解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器...

  • 设计模式[22]-解释器模式-Interpreter Patte

    1.解释器模式简介 解释器模式(Interpreter Pattern)模式是行为型(Behavioral)设计模...

  • 解释器模式

    今天和大家分享的模式是解释器模式。 首先介绍一下解释器模式适合解决哪类问题。 其实,解释器模式需要解决的问题是,如...

  • 解释器模式

    1. 解释器模式 1.1 定义: 解释器模式(Interpreter) : 定义一种文法的表示,并定义一种解释器...

  • 设计模式解释器模式

    解释器模式的定义 解释器模式 (Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来...

网友评论

      本文标题:解释器模式

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