Java 解释器模式是一种设计模式,它可以用来实现一个语言的解释器。它是一种行为型模式,允许用户在不同的上下文中使用不同的语法来表示相同的概念。
Java 解释器模式通常由以下几部分组成:
Java 解释器模式最常用于功能复杂、需要大量数学运算、需要大量内存使用、需要大量 I/O 操作的应用场合。例如地图对象处理、图形处理、数学运算、数据库处理、文本处理以及其他特定领域中使用 Java 语言时都会面临这样的问题。此时 Java 解释器就能很好地帮助你处理这些问题。
public class Interpreter {
public static void main(String[] args) {
String expression = "1 + 2 * 3";
// 创建上下文对象
Context context = new Context(expression);
// 创建语法分析树
Parser parser = new Parser();
// 将上下文传递到语法分析树中去
Node node = parser.parse(context);
// 创建语义分析树并传递上下文对象
SemanticAnalyzer semanticAnalyzer = new SemanticAnalyzer();
node.accept(semanticAnalyzer, context);
// 生成机器可执行代码
CodeGenerator codeGenerator = new CodeGenerator();
codeGenerator.generate(node, context);
}
}
我们通常使用解释器模式来评估语言语法或表达。
这种类型的模式是行为模式之一。
interface Expression { public boolean evaluate(String context); } class IsInExpression implements Expression { private String data; public IsInExpression(String data) { this.data = data; } @Override public boolean evaluate(String context) { if (context.contains(data)) { return true; } return false; } } class OrExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public OrExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean evaluate(String context) { return expr1.evaluate(context) || expr2.evaluate(context); } } class AndExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean evaluate(String context) { return expr1.evaluate(context) && expr2.evaluate(context); } } public class Main { public static void main(String[] args) { Expression select = new IsInExpression("Select"); Expression from = new IsInExpression("From"); Expression isSelectFrom = new AndExpression(select, from); Expression insert = new IsInExpression("Insert"); Expression update = new IsInExpression("Update"); Expression isInsertOrUpdate = new OrExpression(insert, update); System.out.println(isSelectFrom.evaluate("Select")); System.out.println(isInsertOrUpdate.evaluate("Insert")); System.out.println(isSelectFrom.evaluate("Select From")); System.out.println(isInsertOrUpdate.evaluate("Update")); } }
上面的代码生成以下结果。
Java设计模式 - 空对象模式在空对象模式中,创建一个无业务对象,包括 null 对象。我们使用无业务对象来替换空指针检查。我们称...
Java面向对象设计 -Java内部类成员内部类可以访问其所有实例成员,实例字段和其封闭类的实例方法。class Outer {private int val...
Java面向对象的设计 -Java继承隐藏方法隐藏类从其超类继承所有非私有静态方法。重定义类中继承的静态方法称为方法隐藏。子类中的...
Java数据类型教程 -Java字符串转换String类有一个重载的valueOf()静态方法来获取任何原始数据类型或任何对象的值的字符串表示。...
JavaFX教程 -JavaFX HBoxJavaFX API具有将UI控件显示到场景图上的布局类。HBox布局类将JavaFX子节点放在水平行中。新的子节点附...