解释器模式 | Interpreter Pattern

来源:互联网 发布:js模拟鼠标移动 编辑:程序博客网 时间:2024/06/05 11:36

解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

创建一个表达式接口:

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

创建实现上述接口的实体类:

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

使用 Expression 类来创建规则,并解析它们。

public class InterpreterPatternDemo {   //规则:Julie 是一个已婚的女性   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 isMarriedWoman = getMarriedWomanExpression();      System.out.println("John is male? " + isMale.interpret("John"));      System.out.println("Julie is a married women? "       + isMarriedWoman.interpret("Married Julie"));   }}

输出:

Julie is a married women? true
原创粉丝点击