解释器模式(Interpreter)为某一特定语言定义文法,并为该语言的特定上下文提供解释。
解释器模式包含五部分:
- AbstractExpression 声明一个抽象的解释操作
- TerminalExpression 终结符表达式,实现终结符的解释操作
- NonterminalExpression 非终结符表达式,实现非终结符的解释操作
- Context 解释器之外的全局信息
- Client 构建某一语言的句子,并调用解释操作
AbstractExpression
interface Expression {
boolean interpret(String context);
}
TerminalExpression
class BoolExpression implements Expression {
private String name;
public BoolExpression(String name) {
this.name = name;
}
@Override
public boolean interpret(String context) {
return context.contains(name);
}
}
NonterminalExpression
class AndExpression implements Expression {
private Expression expression1;
private Expression expression2;
public AndExpression(Expression expression1, Expression expression2) {
this.expression1 = expression1;
this.expression2 = expression2;
}
@Override
public boolean interpret(String context) {
return expression1.interpret(context) && expression2.interpret(context);
}
}
Client
class Client {
void test() {
String context = "ABCDEF";
Expression expressionABC = new BoolExpression("ABC");
Expression expressionDEF = new BoolExpression("DEF");
Expression andExpression = new AndExpression(expressionABC, expressionDEF);
andExpression.interpret(context);
}
}