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对于某个特定的领域出现的不断重复的问题,可以转换成一种语法规则下的语句

这种思想高度概括的模式是比较难的,实际使用场景也是比较少,算是很生僻的一种模式,最常见的是正则表达式。

原创粉丝点击