Behavioral Patterns Part 3/11: Interpreter Pattern
来源:互联网 发布:mac 显示已经更新系统 编辑:程序博客网 时间:2024/05/19 04:03
Behavioral Patterns Part 3/11: Interpreter Pattern
目录
- Behavioral Patterns Part 311 Interpreter Pattern
- 目录
- Definition
- UML Class
- Implementation
Definition
Interpreter Pattern 是这样一种模式(援引GoF的定义):给定一种语言(language),在定义这个语言的语法(grammar)的同时,定义一个解释器(interpreter),这个解释器就用该语法来解析(parse)这个语言的句子。
它提供了一种检验 语言的语法或者表达式合法性 的方法。这个模式需要实现一个 表达式接口,这个接口的功能就是用来告知如何解释一个特定的上下文(context)。
Interpreter Pattern 经常用来做 SQL解析,符号处理引擎等。
何时使用?当希望按照特定的语法解析语句或者表达式时。
使用频率: Low
UML Class
Implementation
创建一个 Expression 接口以及这个接口的具体实现类。 TerminalExpression 类作为 context 的主要解释器(interpreter),OrExpression 和 AndExpression 类用来创建一个 组合表达式(combinational expressions)。
// Expression.javapackage designpatterns.behavioralpatterns.interpreter;public interface Expression { public boolean interpret(String context);}// ExpressionImpl.javapackage designpatterns.behavioralpatterns.interpreter;class TerminalExpression implements Expression { private String data; public TerminalExpression(String data) { this.data = data; } @Override public boolean interpret(String context) { if(context.contains(data)) { return true; } return false; }}class AndExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret(context) && expr2.interpret(context); }}class OrExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public OrExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret(context) || expr2.interpret(context); }}// InterpreterDemo.javapackage designpatterns.behavioralpatterns.interpreter;public class InterpreterDemo { /** * Rule: * Robert and John are male */ public static Expression getMaleExpression() { Expression robert = new TerminalExpression("Robert"); Expression john = new TerminalExpression("John"); return new OrExpression(robert, john); } /** * Rule: * Julie is a married woman */ public static Expression getMarriedWomanExpression() { Expression julie = new TerminalExpression("Julie"); Expression married = new TerminalExpression("Married"); return new AndExpression(julie, married); } public static void main(String[] args) { Expression isMale = getMaleExpression(); Expression isMarriedWoman = getMarriedWomanExpression(); System.out.println("John is male ? " + isMale.interpret("John")); System.out.println("Julie is a married woman ? " + isMarriedWoman.interpret("Married Julie")); }}// outputJohn is male ? trueJulie is a married woman ? true
0 0
- Behavioral Patterns Part 3/11: Interpreter Pattern
- Behavioral Patterns Part 2/11: Command Pattern
- [Special] Design Pattern - Behavioral Patterns - Interpreter Pattern
- Interpreter Pattern(GoF-Behavioral Design Patterns)
- Behavioral Patterns Part 1/11: Chain Of Responsibility Pattern
- Design Pattern----Behavioral Patterns
- Design Pattern - Behavioral Patterns - Observer Pattern
- Design Pattern - Behavioral Patterns - Mediator Pattern
- [Special] Design Pattern - Behavioral Patterns - Memento Pattern
- [Special] Design Pattern - Behavioral Patterns - Command Pattern
- [Special] Design Pattern - Behavioral Patterns - State Pattern
- Design Pattern - Behavioral Patterns - Strategy Pattern
- Design Pattern - Behavioral Patterns - Visitor Pattern
- [Specical] Design Pattern - Behavioral Patterns - Iterator Pattern
- Design Pattern - Behavioral Patterns - Template Pattern
- Command Pattern(GoF-Behavioral Design Patterns)
- Iterator Pattern(GoF-Behavioral Design Patterns)
- Mediator Pattern(GoF-Behavioral Design Patterns)
- c++ primer 入门练习题 1.4.1节
- 物联网体系系统学习笔记
- BZOJ2632: [neerc2011]Gcd guessing game
- 值乎与分答:一场关于知识付费的“有声”暗战
- 每日一得--hadoop学习笔记
- Behavioral Patterns Part 3/11: Interpreter Pattern
- 174、请简述以下两个for循环的优缺点(5分)
- 浅析nodejs实现Websocket的数据接收与发送
- mysql进阶:find_in_set的使用例子
- (转)收集——Android Handler分析总结篇
- Array数组对象常用操作总结(一)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- Kafka笔记-1-kafka入门介绍
- Git常用命令总结