解释器模式(Interpreter), 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
源问地址:http://ihongqiqu.com/2016/09/14/Interpreter-Pattern/
适用场景
- 重复发生的问题可以使用解释器模式
- 一个简单语法需要解释的场景
优点
- 可扩展性比较好,灵活
- 增加了新的解释表达式的方式
- 易于实现文法
缺点
- 执行效率比较低,可利用场景比较少
- 对于复杂的文法比较难维护
UML结构图
Interpreter Pattern源码
抽象表达式,声明一个抽象的解释操作
public interface AbstractExpression {
public void interpret(Context context);
}
终结符表达式
public class TerminalExpression implements AbstractExpression {
@Override
public void interpret(Context context) {
System.out.println("终端解释器");
}
}
非终结符表达式
public class NonterminalExpression implements AbstractExpression {
@Override
public void interpret(Context context) {
System.out.println("非终端解释器");
}
}
包含解释器之外的一些全局信息
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;
}
}
客户端调用
解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,
这个解释器使用该表示来解释语言中的句子。
public class Client {
public static void main(String[] args) {
Context context = new Context();
ArrayList<AbstractExpression> list = new ArrayList<AbstractExpression>();
list.add(new TerminalExpression());
list.add(new NonterminalExpression());
list.add(new TerminalExpression());
list.add(new NonterminalExpression());
for (AbstractExpression expression : list) {
expression.interpret(context);
}
}
}
设计模式系列:
创建型 | 结构型 | 行为型 |
---|---|---|
工厂方法 简单工厂 抽象工厂 建造者模式 单例模式 原型模式 |
组合模式 外观模式 桥接模式 代理模式 享元模式 适配器模式 装饰模式 |
策略模式 模板方法 状态模式 观察者模式 备忘录模式 迭代器模式 命令模式 职责链模式 解释器模式 访问者模式 中介者模式 |
网友评论