版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
解释器模式
UML
解释说明
- 解释器模式:给定一个语言,定义它的文法中的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
- 如果一种特定类型的问题发生频率足够高,那么就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。
- 不足:解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法可能难以管理和维护。当文法过度复杂时可以采用其他技术:语法分析程序、编译器生成器等。
代码实现
- AbstractExpression.class
package learn23;
public abstract class AbstractExpression {
public abstract void interpret(Context context);
}
- TerminalExpression.class
package learn23;
public class TerminalExpression extends AbstractExpression {
@Override
public void interpret(Context context) {
System.out.println("终端解释器!");
}
}
- NonTerminalExpression.class
package learn23;
public class NonTerminalExpression extends AbstractExpression {
@Override
public void interpret(Context context) {
System.out.println("非终端解释器!");
}
}
- Context.class
package learn23;
public class Context {
private String input;
private String output;
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
public String getOutput() {
return output;
}
public void setOutput(String output) {
this.output = output;
}
}
- Main.class
import learn23.*;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception {
Context context = new Context();
List<AbstractExpression> list = new ArrayList<>();
list.add(new TerminalExpression());
list.add(new NonTerminalExpression());
list.add(new TerminalExpression());
list.add(new TerminalExpression());
for (AbstractExpression exp :
list) {
exp.interpret(context);
}
}
}
参考资料
- 大话设计模式