设计模式之---解释器模式
2017-05-05 19:04
120 查看
解释器模式是个不怎么常用的设计模式。我们先来举一个简单的例子说明它。
a+b-c这么一个表达式,+,-都是非终结符表达式,a,b,c都是终结符表达式。非终结表达式一般是文法中的运算符或者关键字,而终结表达式一般是文法中的运算单元。
package interpreter;
import java.util.HashMap;
import java.util.Map;
public class Context {
private final Map<String, Integer> valueMap = new HashMap<String, Integer>();
public void addValue(final String key, final int value) {
valueMap.put(key, Integer.valueOf(value));
}
public int getValue(final String key) {
return valueMap.get(key).intValue();
}
}
package interpreter; public abstract class AbstractExpression { public abstract int interpreter(Context context); }
package interpreter; public class AddNonterminalExpression extends AbstractExpression { private final AbstractExpression left; private final AbstractExpression right; public AddNonterminalExpression(final AbstractExpression left, final AbstractExpression right) { this.left = left; this.right = right; } @Override public int interpreter(final Context context) { return this.left.interpreter(context) + this.right.interpreter(context); } }
package interpreter; public class SubtractNonterminalExpression extends AbstractExpression { private final AbstractExpression left; private final AbstractExpression right; public SubtractNonterminalExpression(final AbstractExpression left, final AbstractExpression right) { this.left = left; this.right = right; } @Override public int interpreter(final Context context) { return this.left.interpreter(context) - this.right.interpreter(context); } }
package interpreter; public class TerminalExpression extends AbstractExpression { private final int i; public TerminalExpression(final int i) { this.i = i; } @Override public int interpreter(final Context context) { return this.i; } }
package interpreter; import flyweight.Flyweight; import flyweight.FlyweightFactory; import flyweight.UnsharedFlyweight; public class Client { public static void main(String[] args) { // TODO Auto-generated method stub //a+b-c final Context context = new Context(); context.addValue("a", 7); context.addValue("b", 8); context.addValue("c", 2); final AddNonterminalExpression addValue = new AddNonterminalExpression (new TerminalExpression(context.getValue("a")), new TerminalExpression(context.getValue("b"))); final SubtractNonterminalExpression subtractValue = new SubtractNonterminalExpression (addValue, new TerminalExpression(context.getValue("c"))); System.out.println(subtractValue.interpreter(context)); } }解释器模式的优缺点:
解释器模式的应用场景和注意事项:
相关文章推荐
- .NET设计模式(20):解释器模式(Interpreter Pattern)
- 设计模式之解释器模式(interpreter)
- 设计模式笔记(16)---解释器模式(行为型)
- 设计模式笔记(16)---解释器模式(行为型)
- 设计模式--解释器模式(Interpreter)
- 设计模式——解释器模式
- 设计模式笔记(二十三) —— 解释器模式
- 设计模式笔记--行为型模式-之三 解释器
- 设计模式--解释器模式(Interpreter)
- 设计模式学习(十二)职责链模式-命令模式-解释器模式
- 深入浅出基于Java的解释器设计模式
- 设计模式之Interpreter(解释器)
- 设计模式之Interpreter(解释器)
- 设计模式 - Interpreter Pattern(解释器模式)
- 设计模式袖珍版 连续转载之 - Interpreter(解释器)
- 深入浅出基于Java的解释器设计模式
- 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)
- [导入]C#面向对象设计模式纵横谈(16):(行为型模式) Interpreter 解释器模式.zip(9.14 MB)
- 设计模式--解释器模式(Interpreter)
- 设计模式(22)-解释器模式(Interpreter)