Java设计模式之解释器模式
来源:互联网 发布:侠客风云传前传优化 编辑:程序博客网 时间:2024/06/04 19:50
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub String regex="2 * 10 / 5 * 3 "; Calculator calculator=new Calculator(); int result=calculator.build(regex); System.out.println("===result="+result); }}
上面是调用测试的代码,下面是画的模型图,当然其实有更简便的方法,这里用java设计模式之解释器模式来实现。
//抽象节点public interface Node { public int compute();}//二叉树最边沿节点public class LastNode implements Node{ private int value; public LastNode(int value) { // TODO Auto-generated constructor stub this.value=value; } @Override public int compute() { // TODO Auto-generated method stub return value; }}//节点node实现类,二叉树的节点public abstract class ValueNode implements Node { protected Node leftNode; protected Node rightNode; public ValueNode(Node leftNode,Node rightNode) { // TODO Auto-generated constructor stub this.leftNode=leftNode; this.rightNode=rightNode; }}
下面是符号节点
public class DivideNode extends ValueNode { //除法节点符 public DivideNode(Node leftNode, Node rightNode) { super(leftNode, rightNode); // TODO Auto-generated constructor stub } @Override public int compute() { // TODO Auto-generated method stub return leftNode.compute()/rightNode.compute(); }}public class MultyNode extends ValueNode { //乘法符节点 public MultyNode(Node leftNode, Node rightNode) { super(leftNode, rightNode); // TODO Auto-generated constructor stub } @Override public int compute() { // TODO Auto-generated method stub return leftNode.compute()*rightNode.compute(); }}
总结:1必须有一个抽象接口
2构建语法树
应用场景: 1简单的语言需要解释执行而且可以将该语言中的语句表示一个抽象的语法树
2对于某个特定的领域出现的不断重复的问题,可以转换成一种语法规则下的语句
这种思想高度概括的模式是比较难的,实际使用场景也是比较少,算是很生僻的一种模式,最常见的是正则表达式。
阅读全文
0 0
- 《Java设计模式》之解释器模式
- java设计模式之解释器模式
- Java设计模式之解释器模式
- JAVA设计模式之解释器模式
- java设计模式之解释器模式
- Java设计模式之解释器模式
- Java设计模式之解释器模式
- JAVA设计模式之解释器模式
- Java设计模式之解释器模式
- Java设计模式之解释器模式
- Java设计模式之十七(解释器模式)
- Java设计模式(行为型)之-解释器模式
- Java设计模式笔记之解释器模式
- (二十四)Java设计模式之解释器模式
- 设计模式之解释器
- 设计模式之Interpreter解释器模式
- 设计模式之解释器模式
- 设计模式之解释器模式
- astyle批量优化代码风格
- 通过JDBC连接SQL Server
- 多线程二
- 拷贝构造函数的调用
- Bootstrap-导航栏组件
- Java设计模式之解释器模式
- 算法的一些小栗子6(递归算法)
- Anaconda安装
- Maven学习总结系列四:坐标与依赖
- 数据结构与算法分析-C语言描述 3.4 交集
- 隐式动画的性能瓶颈
- 你真的会写Java吗?
- React中的Diff算法——Christopher Chedeau(原文翻译)
- py2neo3.0 批处理方案