解释器模式
来源:互联网 发布:慈溪行知职高黄百央 编辑:程序博客网 时间:2024/06/07 15:12
这是设计模式最后一篇,迟迟没有写。听到这个名字可能会想到解释型语言,学习编译倒也可以参考一下这个。这个在实际工作中用的很少,直接上实现加减乘除的代码吧
public class Interpreter { interface Expression { int interpret(Context context); } //终结符表达式(Terminal Expression) static class Constant implements Expression { private int i; public Constant(int i) { this.i = i; } @Override public int interpret(Context context) { return i; } } static class Variable implements Expression { @Override public int interpret(Context context) { return context.LookupValue(this); } } //非终结符表达式(Nonterminal Expression) static class Add implements Expression { private Expression left, right; public Add(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret(Context context) { return left.interpret(context) + right.interpret(context); } } static class Sub implements Expression { private Expression left, right; public Sub(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret(Context context) { return left.interpret(context) - right.interpret(context); } } static class Mul implements Expression { private Expression left, right; public Mul(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret(Context context) { return left.interpret(context) * right.interpret(context); } } static class Div implements Expression { private Expression left, right; public Div(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret(Context context) { return left.interpret(context) / right.interpret(context); } } //环境(Context)角色,保存一些值 static class Context { private Map valueMap = new HashMap<>(); public void addValue(Variable x, int y) { valueMap.put(x, y); } public int LookupValue(Variable x) { return (int) valueMap.get(x); } } public static void main(String[] args) { Context context = new Context(); Variable a = new Variable(); Variable b = new Variable(); Constant c = new Constant(15000); context.addValue(a, 14); context.addValue(b, 10000); Expression expression = new Add(new Sub(c, b), a); System.out.println("Result = " + expression.interpret(context)); }}输出:Result = 5014
核心就两个:环境对象、表达式。写完了,很多地方思考的应该都不是太清楚。以后可能要持续更新,好的东西都是打磨出来的。等自己再上一个台阶也会想想当时的思维,写下来也有个记录还是挺好的。
觉得容易理解的话面向对象的23种设计模式点这里
阅读全文
1 0
- 深入浅出解释器模式
- 解释器(Interpreter )模式
- Interpreter解释器模式
- Interperter 解释器模式
- 解释器模式 InterpretePattern
- 解释器模式
- 解释器模式
- 深入浅出解释器模式
- 解释器模式(python)
- 解释器模式
- 解释器模式 详解
- 解释器模式
- Java解释器模式
- 解释器模式
- Interpreter 解释器模式
- java 解释器模式
- 解释器模式
- 解释器模式
- BEM 命名规范
- oracle pctfree和pctused详解
- SimpleDateFormat使用详解
- DiagramDesigner中文
- BEM 命名规范
- 解释器模式
- -Djava.ext.dirs=lib的作用
- 获取当前的UIViewController
- VMware虚拟磁盘VMDK格式说明书1.1--- 4 Simple Extents
- HttpUrlConnection用get和post请求发送参数
- 在环境变量PATH中添加路径
- 演示响应正文乱码的问题--字节流
- androidStudio中的HttpClient
- 记录一次由Redis漏洞引起的服务器遭遇入侵事件