鍍金池/ 教程/ Java/ Java解釋器模式
Java前端控制器模式
Java工廠設計模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對象模式
Java迭代器模式
Java責任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設計模式
Java空對象模式
Java數(shù)據(jù)訪問對象模式
Java訪問者模式
Java組合實體模式
Java服務定位器模式

Java解釋器模式

解釋器模式提供了一種評估計算語言語法或表達式的方法。 這種類型的模式屬于行為模式。 這種模式涉及實現(xiàn)一個表達式接口,它告訴解釋一個指定的上下文。 此模式用于SQL解析,符號處理引擎等。

實現(xiàn)示例

我們將創(chuàng)建一個接口Expression并且在具體的類實現(xiàn)這個Expression接口。 定義了一個TerminalExpression類,用作所討論的上下文的主解釋器。 其他的類 - OrExpressionAndExpression用于創(chuàng)建組合表達式。

InterpreterPatternDemo這是一個演示類,將使用Expression類來創(chuàng)建規(guī)則并演示表達式的解析。

實現(xiàn)解釋器模式的結構如下圖所示 -

第1步

創(chuàng)建表達式接口 -
Expression.java

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

第2步

創(chuàng)建實現(xiàn)上述接口的具體類。
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);
   }
}

第3步

reterPatternDemo使用Expression類來創(chuàng)建規(guī)則,然后解析它們。

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

第4步

驗證輸出 -

John is male? true
Julie is a married women? true