- Java工厂设计模式
- Java抽象工厂模式
- Java单例模式
- Java建造者(Builder)模式
- Java原型模式
- Java适配器模式
- Java桥接模式
- Java过滤器模式(条件模式)
- Java组合模式
- Java装饰模式
- Java门面模式(或外观模式)
- Java享元模式(Flyweight Pattern)
- Java责任链模式
- Java命令模式
- Java迭代器模式
- Java中介者模式(Mediator Pattern)
- Java解释器模式
- Java备忘录模式
- Java观察者模式
- Java状态模式
- Java空对象模式
- Java策略模式
- Java模板模式
- Java访问者模式
- Java MVC模式
- Java业务代理模式
- Java组合实体模式
- Java数据访问对象模式
- Java前端控制器模式
- Java拦截过滤器模式
- Java服务定位器模式
- Java传输对象模式
Java解释器模式
解释器模式提供了一种评估计算语言语法或表达式的方法。 这种类型的模式属于行为模式。 这种模式涉及实现一个表达式接口,它告诉解释一个指定的上下文。 此模式用于SQL解析,符号处理引擎等。
实现示例
我们将创建一个接口Expression
并且在具体的类实现这个Expression
接口。 定义了一个TerminalExpression
类,用作所讨论的上下文的主解释器。 其他的类 - OrExpression
和AndExpression
用于创建组合表达式。
InterpreterPatternDemo
这是一个演示类,将使用Expression
类来创建规则并演示表达式的解析。
实现解释器模式的结构如下图所示 -
第1步
创建表达式接口 -
Expression.java
public interface Expression { public boolean interpret(String context); }
第2步
创建实现上述接口的具体类。
TerminalExpression.java
public class TerminalExpression implements Expression { private String data; public TerminalExpression(String data){ this.data = data; } @Override public boolean interpret(String context) { if(context.contains(data)){ return true; } return false; } }
OrExpression.java
public 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 interpret(String context) { return expr1.interpret(context) || expr2.interpret(context); } }
AndExpression.java
public 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 interpret(String context) { return expr1.interpret(context) && expr2.interpret(context); } }
第3步
reterPatternDemo
使用Expression
类来创建规则,然后解析它们。
InterpreterPatternDemo.java
public class InterpreterPatternDemo { //Rule: Robert and John are male public static Expression getMaleExpression(){ Expression robert = new TerminalExpression("Robert"); Expression john = new TerminalExpression("John"); return new OrExpression(robert, john); } //Rule: Julie is a married women public static Expression getMarriedWomanExpression(){ Expression julie = new TerminalExpression("Julie"); Expression married = new TerminalExpression("Married"); return new AndExpression(julie, married); } public static void main(String[] args) { Expression isMale = getMaleExpression(); Expression isMarriedWoman = getMarriedWomanExpression(); System.out.println("John is male? " + isMale.interpret("John")); System.out.println("Julie is a married women? " + isMarriedWoman.interpret("Married Julie")); } }
第4步
验证输出 -
John is male? true Julie is a married women? true
上一篇:Java中介者模式(Mediator Pattern)
下一篇:Java备忘录模式
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王