博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解释器模式
阅读量:6185 次
发布时间:2019-06-21

本文共 2373 字,大约阅读时间需要 7 分钟。

* 解释模式:用得极其少:此处用一个加法和乘法例子说明: * 模式特点:一个表达式接口(Expression)和多个实现类,表达式接口有个解释的方法interpret(); * 表达式接口的实现类分成2类: 非终结符表达式(NonterminalExpression),例如 加号就是非总结表达式,因为是一个过程 * 终结符表达式(TerminalExpression):就是能取到具体指的表达表达式,如 5这个数字就是终结表达式,因为它不是一个过程 * Context:上下文,用于存储终结表达式的值 * 本例模拟实现加法和乘法的过程 *///抽象解释器(AbstractExpression)public interface Expression {    int interpret(Context context);}//终结表达式,获取具体值public class NumberExpression implements Expression{    private String name;    public NumberExpression(String name) {        this.name = name;    }    //通过名字在上下文获取具体的值    @Override    public int interpret(Context context) {        return context.interpret(name);    }}//非终结符表达式(NonterminalExpression) 乘法public class MultipyEpression implements Expression{    private Expression e1,e2; //e1,e2都是终结表达式    public MultipyEpression(Expression e1, Expression e2) {        this.e1 = e1;        this.e2 = e2;    }    @Override    public int interpret(Context context) {        //乘法运算        return this.e1.interpret(context)*this.e2.interpret(context);    }}//非终结符表达式(NonterminalExpression) 加法public class AddExpression implements Expression {    private Expression e1,e2; //e1,e2都是终结表达式    public AddExpression(Expression e1, Expression e2) {        this.e1 = e1;        this.e2 = e2;    }    @Override    public int interpret(Context context) {        //加法运算        return this.e1.interpret(context)+this.e2.interpret(context);    }}//上下文表达式public class Context {    private Map
map=new HashMap<>(); //存储终结表达式的值 public void addNum(String name,Integer num){ if(null==map.get(name)){ map.put(name,num); } } //获取终结表达式的值 public int interpret(String name){ return map.get(name); }}public class Test { public static void main(String[] args) { Context context = new Context();//上下文对象 Expression e1 = new NumberExpression("e1"); //终结表达式 Expression e2 = new NumberExpression("e2");//终结表达式 Expression e3 = new NumberExpression("e3");//终结表达式 context.addNum("e1",2);//给终结表达式 赋值 context.addNum("e2",6);//给终结表达式 赋值 context.addNum("e3",3);//给终结表达式 赋值 //计算(2+6)*3 MultipyEpression multipyEpression = new MultipyEpression(new AddExpression(e1, e2), e3); System.out.println(multipyEpression.interpret(context));//24 }}

 

转载于:https://www.cnblogs.com/yangxiaohui227/p/10945268.html

你可能感兴趣的文章
Apache在windows下的安装
查看>>
gulp API 简介
查看>>
项目经理的权宜之计
查看>>
redis应用之使用sentinel实现主从复制高可用
查看>>
软件工程院校排名
查看>>
Excle 创建下拉列表
查看>>
SSH原理之图文详解
查看>>
yum的repo文件详解、以及epel简介、yum源的更换
查看>>
我的友情链接
查看>>
第 三 十 九 天:更 换 yum 源 和 卸 载 图 形 界 面
查看>>
1,Python13_day1
查看>>
flask-uploads扩展的使用
查看>>
小猪佩奇社会人专用服务器,有意思的python小程序,附python代码
查看>>
设计模式--代理模式
查看>>
codeblock 快捷键
查看>>
共享程序集和强命名程序集
查看>>
机器学习--逻辑回归_LR(内附细说极大似然估计,梯度下降法)
查看>>
Centos7禁止或者允许开机启动服务
查看>>
浏览器重绘和回流
查看>>
14-python-函数
查看>>