设计模式-行为型- 解释器模式(Interpreter)
2016-08-26 21:54
681 查看
定义
给定一种语言,定义它的方法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子角色
抽象解释器(AbstractExpression):声明一个抽象解释操作终结符表达式(TerminalExpression):实现文法中与终结符相关联的解释操作
非终结符表达式(NonterminalExpression):实现了文法中非终结符的解释操作,可用于文法中的连接符、运算符等
上下文/环境(Context):它包含了解释器之外的全局信息
优点
解释器是可以作为一个语法分析工具,扩展性很好,修改语法规则,只需要修改相应的终结符类就可以,如果要修改语法,则修改相应的非终结符类即可缺点
语法较为复杂时,类太多适用场景
重复发生的有规律的问题,如加减乘除表达式类图
package com.vapy.behavior.Interpreter; /** * @author vapy 2016年8月26日 * * 抽象解释器 */ public abstract class AbstractExpression { public abstract String interpret(String str); }
package com.vapy.behavior.Interpreter; /** * @author vapy 2016年8月26日 * * 终结符表达式 */ public class Move extends AbstractExpression { public Move() { } @Override public String interpret(String distance) { if(distance.matches("[0-9]*")){ return "move " + distance + " meters "; } return "move 0 meter"; //如果不是数据,移动距离算0 } }
package com.vapy.behavior.Interpreter; /** * @author vapy 2016年8月26日 * * 非终结符表达式 */ public class And extends AbstractExpression { public And() { } @Override public String interpret(String and) { if(and.equals("and")) { return ",and then "; } return ""; } }
package com.vapy.behavior.Interpreter; /** * @author vapy 2016年8月26日 * * 上下文 */ public class Context { private String input; private String output = ""; public Context(String input) { this.input = input; } public void exec() { AbstractExpression move = new Move(); AbstractExpression and = new And(); String[] in = input.split(" "); for(String str : in) { if(str.equalsIgnoreCase("and")) { output += and.interpret(str); } else { output += move.interpret(str); } } } public String getOutput() { return output; } }
package com.vapy.behavior.Interpreter; /** * @author vapy 2016年8月26日 */ public class Client { public static void main(String[] args) { String inputExpr = "22 and 23"; Context context = new Context(inputExpr); context.exec(); System.out.println(context.getOutput()); } }
本文代码可在github查看:点击此处
相关文章推荐
- 设计模式22---设计模式之解释器模式(Interpreter)(行为型)
- C#面向对象模式设计第十六讲:Interpreter 解释器模式(行为型模式)
- 设计模式深入学习--Interpreter 解释器模式(行为型模式)
- 面向对象设计模式之Interpreter解释器模式(行为型)
- JAVA设计模式(22):行为型-解释器模式(Interpreter)
- 设计模式(15)-行为型-解释器模式(Interpreter)
- [导入]C#面向对象设计模式纵横谈(16):(行为型模式) Interpreter 解释器模式.zip(9.14 MB)
- 设计模式(二十)解释器模式(Interpreter)-行为型
- 设计模式15:Interpreter 解释器模式(行为型模式)
- 设计模式(15)--Interpreter(解释器模式)--行为型
- 设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 解释器模式(Interpreter) - Java实现
- JAVA设计模式(22):行为型-解释器模式(Interpreter)
- 设计模式--解释器模式Interpreter(行为型)
- 步步为营 .NET 设计模式学习笔记 二十三、Interpreter(解释器模式)
- 设计模式之Interpreter(解释器)
- [php]php设计模式 Interpreter(解释器模式)
- php设计模式 Interpreter(解释器模式)
- 23种设计模式之解释器模式(Interpreter)