设计模式之解释器模式的学习思考
来源:互联网 发布:视频播放器编程 编辑:程序博客网 时间:2024/05/16 13:01
解释器模式,就跟它的名字一样,起到解释的作用,比如对一个表达式进行解释,使其能够被人们所理解,属于设计模式里的行为型模式一种这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。优点: - 可扩展性比较好,灵活。 - 增加了新的解释表达式的方式。 - 易于实现简单文法。缺点: - 可利用场景比较少。 - 对于复杂的文法比较难维护。 - 解释器模式会引起类膨胀。 - 解释器模式采用递归调用方法。
设计:
- 一个接口,定义表达式
- 实现接口,分实现类为表达式定义类和规则定义类
- main方法实现调用
代码:
//创建一个表达式接口interface Expression{ boolean interpret(String context);}class TerminalExpression implements Expression{ private String data; public TerminalExpression(String data) { this.data=data; } public boolean interpret(String context){ if(context.contains(data)){ return true; } return false; }}class OrExpression implements Expression{ private Expression expr1=null; private Expression expr2=null; public OrExpression(Expression expr1, Expression expr2) { super(); this.expr1 = expr1; this.expr2 = expr2; } public boolean interpret(String context){ return expr1.interpret(context)||expr2.interpret(context); }}class AndExpression implements Expression{ private Expression expr1=null; private Expression expr2=null; public AndExpression(Expression expr1, Expression expr2) { super(); this.expr1 = expr1; this.expr2 = expr2; } public boolean interpret(String context) { return expr1.interpret(context)&&expr2.interpret(context); }}public class InterpreterPatternDemo { public static Expression getFruitExpression() { //规则:苹果和橘子是水果(或) Expression apple=new TerminalExpression("Apple"); Expression orange=new TerminalExpression("Orange"); return new OrExpression(apple, orange); } //规则 女朋友很能吃(且) public static Expression getEatAmieExpression(){ Expression amie=new TerminalExpression("女朋友"); Expression eat=new TerminalExpression("能吃"); return new AndExpression(amie,eat); } public static void main(String[] args) { Expression isFruit=getFruitExpression(); Expression isAmie=getEatAmieExpression(); System.out.println("苹果是水果吗:"+isFruit.interpret("Apple")); System.out.println("女朋友都能吃吗:"+isAmie.interpret("女朋友 能吃")); }}
输出:
苹果是水果吗:true 女朋友都能吃吗:true
阅读全文
0 0
- 设计模式之解释器模式的学习思考
- 设计模式之装饰器模式的学习思考
- 设计模式与泡mm的关系之interpret解释器模式及解释器模式的再思考
- 设计模式之单例模式的学习思考
- 设计模式之创建者模式的学习思考
- 设计模式之原型模式的学习思考
- 设计模式之适配器模式的学习思考
- 设计模式之桥接模式的学习思考
- 设计模式之过滤器模式的学习思考
- 设计模式之组合模式的学习思考
- 设计模式之外观模式的学习思考
- 设计模式之享元模式的学习思考
- 设计模式之代理模式的学习思考
- 设计模式之命令模式的学习思考
- 设计模式之迭代器模式的学习思考
- 设计模式之中介者模式的学习思考
- 设计模式之备忘录模式的学习思考
- 设计模式学习的思考
- HTML基础知识总结2
- 数组的蛇形打印
- Numeric Overflow,SQL问题?Java Code问题?
- vue+element+less項目搭建
- 打造自己的 APP「冰与火百科」(一):分析定位
- 设计模式之解释器模式的学习思考
- ROS学习笔记(四):ROS主题
- js原生和ajax的get和post方法以及jsonp的原生写法
- Volley源码看这一篇就够了
- Android图形显示系统——上层显示2:硬件加速实现
- 图像梯度--matlab gradient理解
- OpenCV图像边缘检测(Canny算法)
- 数据库ACID属性
- 数据库的类型