一、我的理解
目前对解释器模式的理解就是采用一个统一的接口,然后由底下的类来实现具体的翻译工作,有点是从语义方面来判断这种模式。。。具体仍待学习。。。。
二、实现方式
定义一个接口,其他类实现该接口即称作一个解释器
三、实例
Java代码:
Expression接口:统一对外接口
package com.study.dp.interpreter;
public interface Expression {
public boolean interpret(String context);
}
TerminalExpression类:实现了Expression接口的类,实际执行命令内容
package com.study.dp.interpreter;
public class TerminalExpression implements Expression {
private String data;
public TerminalExpression(String data) {
super();
this.data = data;
}
@Override
public boolean interpret(String context) {
if(context.contains(data)) {
return true;
}
return false;
}
}
OrExpression类:组合两种解释器,返回其两者结果的或操作
package com.study.dp.interpreter;
public class OrExpression implements Expression {
private Expression expr1;
private Expression expr2;
public OrExpression(Expression expr1, Expression expr2) {
super();
this.expr1 = expr1;
this.expr2 = expr2;
}
@Override
public boolean interpret(String context) {
return expr1.interpret(context) || expr2.interpret(context);
}
}
AndExpression类:组合两种解释器,返回其两者结果的与操作
package com.study.dp.interpreter;
public class AndExpression implements Expression {
private Expression expr1;
private Expression expr2;
public AndExpression(Expression expr1, Expression expr2) {
super();
this.expr1 = expr1;
this.expr2 = expr2;
}
@Override
public boolean interpret(String context) {
return expr1.interpret(context) && expr2.interpret(context);
}
}
Demo类:测试代码
package com.study.dp.interpreter;
public class Demo {
// 规则:Robert和John是男性
public static Expression getMaleExpression() {
Expression robert = new TerminalExpression("Robert");
Expression john = new TerminalExpression("John");
return new OrExpression(robert, john);
}
// 规则:Julie是一个已婚的女性
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("Jullie is a married woman? "+isMarriedWoman.interpret("Married Julie"));
}
}
四、应用场景
可利用场景比较少,JAVA 中如果碰到可以用 expression4J 代替