Modo de intérprete del patrón de diseño 21

antecedentes

En el desarrollo de software, algunas funciones similares pueden aparecer varias veces, y estas funciones tienen ciertas similitudes y regularidades. Así es como podemos resumirlo en un lenguaje sencillo. Esta es la fuente del patrón de intérprete.

¿Está la descripción anterior en la nube y la niebla? Pongamos un ejemplo. Queremos desarrollar una función que requiera la entrada de fórmulas, parámetros de entrada y devuelva resultados correctos. Por ejemplo, ingresamos los parámetros:

a=2;b=4;c=10

Luego ingresamos la expresión:

a+b-c

Resultado de salida: -4.

Ingresemos otra expresión:

a * b / c

Resultado de salida: 0.8.

Si tuviera que desarrollar esta función, ¿qué haría? Si utiliza el modo de intérprete, obtendrá buenos resultados.

Que es el modo intérprete

"

Dado un idioma, defina una representación para su gramática junto con un intérprete que use la representación para interpretar oraciones en el idioma. Use esta representación para interpretar oraciones en el idioma.)

"

El modo de intérprete consta principalmente de los siguientes cinco elementos:

"
  • Rol de Expresión abstracta (Expresión abstracta): define la interfaz del intérprete, acuerda la operación de interpretación del intérprete, e incluye principalmente el método de interpretación interpretar ().

  • El rol de la expresión terminal: Es una subclase de expresiones abstractas que se utilizan para implementar operaciones relacionadas con terminales en la gramática.Cada terminal en la gramática tiene una expresión terminal específica que le corresponde.

  • El papel de la expresión no terminal: también es una subclase de expresiones abstractas, que se utiliza para implementar operaciones relacionadas con símbolos no terminales en la gramática.Cada regla en la gramática corresponde a una expresión no terminal.

  • Rol de contexto: generalmente contiene datos o funciones comunes requeridas por cada intérprete, y generalmente se usa para transferir datos compartidos por todos los intérpretes, y los intérpretes posteriores pueden obtener estos valores desde aquí.

  • Cliente: La tarea principal es convertir la oración o expresión que necesita ser analizada en un árbol de sintaxis abstracto descrito por el objeto intérprete, y luego llamar al método de interpretación del intérprete. Por supuesto, el método de interpretación del intérprete también puede ser Accedido indirectamente a través del rol ambiental.

"

El diagrama de estructura es el siguiente:

Modo intérprete

Código

Echemos un vistazo a cómo se implementa el código:

Contexto

public class Context {
    private AbstractExpression exp;

    public Context() {
        //数据初始化
    }

    public void operation(String info) {
        //调用相关表达式类的解释方法
    }
}

ResumenExpresión

public interface AbstractExpression {
    Object interpret(String info);    //解释方法
}

TerminalExpression

public class TerminalExpression implements AbstractExpression{
    @Override
    public Object interpret(String info) {
        System.out.println("进入终结符表达式的处理逻辑");
        return null;
    }
}

NonterminalExpression

public class NonterminalExpression implements AbstractExpression {
    private AbstractExpression exp1;
    private AbstractExpression exp2;
    @Override
    public Object interpret(String info) {
        System.out.println("进入非终结表达式的逻辑");
        return null;
    }
}

Porque el modo de intérprete es un modo relativamente poco utilizado. Se ha proporcionado la plantilla anterior, puede pensar en cómo usar este modo.

Pensando en el modo de intérprete

El modo de intérprete a menudo tiene problemas de eficiencia y aumentará la complejidad del mantenimiento. Al igual que la pregunta al principio del artículo, podemos usar la fórmula del analizador matemático Expression4J, MESP (Math Expression String Parser) y Jep en Java. Puede explicar algunas expresiones complejas. Es más sencillo de usar que el modo de intérprete original.

Recomendado en el pasado

Escanee el código QR para ser más emocionante. O busque Lvshen_9 en WeChat , puede responder para obtener información en segundo plano

  1. 回复"java" 获取java电子书;

  2. 回复"python"获取python电子书;

  3. 回复"算法"获取算法电子书;

  4. 回复"大数据"获取大数据电子书;

  5. 回复"spring"获取SpringBoot的学习视频。

  6. 回复"面试"获取一线大厂面试资料

  7. 回复"进阶之路"获取Java进阶之路的思维导图

  8. 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

  9. 回复"总结"获取Java后端面试经验总结PDF版

  10. 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

  11. 回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Otro: haga clic en [ Mis beneficios ] para tener más sorpresas.

Supongo que te gusta

Origin blog.csdn.net/wujialv/article/details/110038130
Recomendado
Clasificación