设计模式之---解释器模式
来源:互联网 发布:网络消费者品牌形象 编辑:程序博客网 时间:2024/06/05 23:07
解释器模式是个不怎么常用的设计模式。我们先来举一个简单的例子说明它。
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-cfinal 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));}}解释器模式的优缺点:
解释器模式的应用场景和注意事项:
1 0
- 设计模式之解释器
- 设计模式之Interpreter解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式
- 大话设计模式之解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式,interpreter
- 设计模式之解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式(interpreter)
- 设计模式之解释器模式
- C++设计模式之解释器模式
- 设计模式之 - 解释器模式
- 设计模式之-----解释器模式
- hdu 4027 Can you answer these queries? -线段树
- 关于Java中的环境变量配置的
- java虚拟机年轻代的gc
- glib使用平衡二叉树实现读配置文件
- UVA-11078 Open Credit System
- 设计模式之---解释器模式
- 什么是渐进增强?
- HDU 5492 Find a path【DP】
- 小菜鸟学习SpringMVC(二) 注解开发
- phalcon中文手册
- 计算机网络基础——基本概念
- 2017年ACM模板(常用)弱渣整理 三、图论
- 毕设DAY1
- CF