博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Design Patterns - Interpreter Pattern(译)
阅读量:6309 次
发布时间:2019-06-22

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

译者
希望对你们有所帮助

设计模式-解释器模式

解释器模式提供一种评估语言语法以及表达式的方式。这种类型的设计模式属于行为型设计模式。该设计模式需要实现一个表达式接口,该接口将会被告知需要解释的特定上下文。这种模式经常用于SQL解析,符号处理引擎等。

实现

我们将创建一个Expression接口并且创建实现它的具体类。声明一个具体类TerminalExpression,该类将作为主要的问题的内柔解释器。其他的类如OrExpression,AndExpression 被用来创建组合表达式。

InterpreterPatternDemo,我们的demo类,将使用Expression类创建规则,并且展示如何解析一个表达式。

clipboard.png

第一步

创建一个Expression接口

Expression.java

public interface Expression {   public boolean interpret(String context);}

第二步

创建一个具体类实现Expression接口

TerminalExpression.java

public 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;   }}

OrExpression.java

public 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);   }}

AndExpression.java

public 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);   }}

第三步

InterpreterPatternDemo 使用Expression 类创建解析规则并且解析它们。

InterpreterPatternDemo.java

public class InterpreterPatternDemo {   //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 women   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 women? " + isMarriedWoman.interpret("Married Julie"));   }}

第四步

校验输出。

John is male? trueJulie is a married women? true

转载地址:http://nqixa.baihongyu.com/

你可能感兴趣的文章
URL中?和# 的差别
查看>>
Hexo进阶高级教程(一)
查看>>
React 组件解耦之道
查看>>
20170614-数组去重
查看>>
Angular 4.x Router Link Directives
查看>>
opencv做的小东西
查看>>
DataTables表格插件使用说明
查看>>
DevOps和容器:本地or云端,如何选择?
查看>>
01背包问题
查看>>
treer:命令行生成目录结构的实用小工具
查看>>
RHEL 7配置NFS服务笔记
查看>>
【Servlet】04-使用Session
查看>>
我们该如何做好Code Review?
查看>>
padStart 的 polyfill
查看>>
IBM发布全球首台商用量子计算机
查看>>
教育部下令中小学推广编程教育,全民AI真的要来了
查看>>
面向桌面开发的Windows Template Studio
查看>>
Atlassian的Stash数据中心为Git提供了高可用性及可伸缩性
查看>>
领投鸟喜获网贷互联优秀成员单位称号,筑牢信息安全防线
查看>>
观察者模式
查看>>