设计模式学习笔记--解释器模式
来源:互联网 发布:仿淘宝商城系统源码 编辑:程序博客网 时间:2024/06/07 05:58
十六、解释器模式
解释器模式(interpreter pattern)提供了评估语言的语法或表达式的方式,通过实现接口来解释一个特定的上下文,常用语sql解析,符号处理等。
- 优点:可扩展性好、灵活,易于实现简单文法。
- 缺点:可用场景比较少,复杂文法难于维护。
实现
创建一个解释接口Expression
和实现类,具体的解释规则。定义一个主要的解释器,和其他的组合表达式类。
- 创建接口
IExpression.java
/** * Created by lenovo on 2016/11/30 0030. * 解释器接口 */public interface IExpression { public boolean interpret(String context);}
- 实现接口
TerminalExpression.java
/** * Created by lenovo on 2016/11/30 0030. * 解释器实现类 */public class TerminalExpression implements IExpression{ private String data; public TerminalExpression(String data){ this.data = data; } @Override public boolean interpret(String context) { if (context.contains(data)){ return true; } return false; }}
OrExpression.java
/** * Created by lenovo on 2016/11/30 0030. * OR逻辑的解释器 */public class OrExpression implements IExpression{ private IExpression exp1 = null; private IExpression exp2 = null; public OrExpression(IExpression exp1,IExpression exp2){ this.exp1 = exp1; this.exp2 = exp2; } @Override public boolean interpret(String context) { return exp1.interpret(context) || exp2.interpret(context); }}
AndExpression.java
/** * Created by lenovo on 2016/11/30 0030. * AND逻辑的解释器 */public class AndExpression implements IExpression{ private IExpression exp1 = null; private IExpression exp2 = null; public AndExpression(IExpression exp1, IExpression exp2){ this.exp1 = exp1; this.exp2 = exp2; } @Override public boolean interpret(String context) { return exp1.interpret(context) && exp2.interpret(context); }}
- 演示
InterpreterPatternDemo.java
/** * Created by lenovo on 2016/11/30 0030. * 解释器演示 */public class InterpreterPatternDemo { //规则,robert和john是男性 public static IExpression getMaleExpression(){ IExpression robert = new TerminalExpression("Robert"); IExpression john = new TerminalExpression("John"); return new OrExpression(robert,john); } //规则,julie 是已婚女性 public static IExpression getMarriedWomanExpression(){ IExpression julie = new TerminalExpression("Julie"); IExpression married = new TerminalExpression("Married"); return new AndExpression(julie,married); } public static void main(String[] args){ IExpression isMale = getMaleExpression(); IExpression isMarriedWoman = getMarriedWomanExpression(); //就是用context的上下文,去匹配定义的规则,若满足,则是符合指令。 System.out.println("John is male ? "+isMale.interpret("John")); System.out.println("Julie is a married woman ? "+isMarriedWoman.interpret("Married Julie")); }}
- 输出
John is male ? trueJulie is a married woman ? true
0 0
- 设计模式学习笔记--解释器模式
- 设计模式学习笔记十六(Interpreter解释器模式)
- 设计模式学习笔记——解释器模式
- 设计模式学习笔记——解释器模式
- 设计模式学习笔记——解释器模式
- 设计模式学习笔记——解释器(Interpreter)模式
- 设计模式 笔记 解释器模式 Interpreter
- 设计模式笔记--解释器模式
- 设计模式笔记-Interpreter解释器模式
- 设计模式笔记十六:解释器模式
- 设计模式学习-----解释器模式
- 设计模式学习--解释器模式
- 学习设计模式-解释器模式
- 设计模式学习—解释器模式
- 【设计模式学习笔记十六】【行为模式】【解释器模式(Interpreter)】
- 设计模式学习笔记--解释器模式Interpreter与访问者模式Visitor(Java版)
- Java设计模式笔记:解释器
- java/android 设计模式学习笔记(23)---解释器模式
- 用matlab生成黑白棋盘格作相机标定模板
- IE6的常见浏览器兼容问题
- C#使用webBrowse获取HTML时会弹出脚本错误的解决办法
- 自学iOS开发系列----OC(文件管理类、文件句柄类)
- Linux中断(interrupt)子系统之一:中断系统基本原理
- 设计模式学习笔记--解释器模式
- mysql之group_concat函数详解:将相同的行组合起来
- android6.0动态授权
- NYOJ-58 最少步数
- iOS9和iOS10推送的问题总结
- ios 避免程序crash的有效解决方法
- Struts2.x和Struts1.x的区别
- 【JqGrid】JqGrid使用后台分页+查询条件+排序
- TVS管原理和特性