Interpreter Pattern

一般用于语言和文法处理的设计模式

ref: 解释器模式 | 菜鸟教程

  • Expression 表示了对语句的文法验证操作,相互可以嵌套。相互嵌套的过程表示了文法之间的逻辑关系
  • 实现 interpreter() ,表示对语句的处理
public interface Expression {
   public boolean interpret(String context);
}
  • 核心为 interpret() 方法,传入的 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 InterpreterPatternDemo {
 
   //规则:Robert 和 John 是男性
   public static Expression getMaleExpression(){
      Expression robert = new TerminalExpression("Robert");
      Expression john = new TerminalExpression("John");
      return new OrExpression(robert, john);    
   }
 
   //规则: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 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"));
   }
}
  • Expression 之间的相互嵌套成为一个型结构,在展开的过程中执行为深度优先搜索