百度百科
Interpreter模式
Interpreter(解释器)模式是一种特殊的设计模式,它建立一个解释器(Interpreter),对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。
Interpreter模式,即解释器模式。
解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
实例应用:正则表达式
例子
AbstractExpression(抽象表达式)
声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
1
2
3
|
public abstract class Expression {
abstract void interpret(Context ctx);
}
|
TerminalExpression(终结符表达式)
实现与文法中的终结符相关联的解释操作。
一个句子中的每个终结符需要该类的一个实例。
1
2
3
4
5
6
|
public class SimpleExpression extends Expression {
@Override
void interpret(Context ctx) {
System.out.println("这是普通解析器");
}
}
|
NonterminalExpression(非终结符表达式)
为文法中的非终结符实现解释(Interpret)操作。
1
2
3
4
5
6
|
public class AdvanceExpression extends Expression {
@Override
void interpret(Context ctx) {
System.out.println("这是高级解析器");
}
}
|
Context(上下文)
包含解释器之外的一些全局信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.util.ArrayList;
import java.util.List;
public class Context {
private String content;
private List list = new ArrayList();
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public void add(Expression eps){
list.add(eps);
}
public List getList(){
return list;
}
}
|
Client(客户)
构建(或被给定)表示该文法定义的语言中某个特定的句子的抽象语法树。
该抽象语法树由NonterminalExpression和TerminalExpression的实例装配而成。调用解释操作。
1
2
3
4
5
6
7
8
9
10
11
|
public class Test {
public static void main(String[] args) {
Context ctx = new Context();
ctx.add(new SimpleExpression());
ctx.add(new AdvanceExpression());
ctx.add(new SimpleExpression());
for(Object eps: ctx.getList()){
((Expression)eps).interpret(ctx);
}
}
}
|
运行结果
1
2
3
|
这是普通解析器
这是高级解析器
这是普通解析器
|