Tasarım Kalıpları - Yorumlayıcı Kalıbı

Tercüman kalıbı, dil grameri veya ifadesini değerlendirmek için bir yol sağlar. Bu tür bir örüntü, davranış kalıbına girer. Bu model, belirli bir bağlamı yorumlamayı söyleyen bir ifade arayüzünün uygulanmasını içerir. Bu model SQL ayrıştırma, sembol işleme motorunda vb. Kullanılır.

Uygulama

Biz bir arayüz oluşturmak için gidiyoruz Expression ve uygulama beton sınıfları İfade arayüzü. Söz konusu bağlamın ana yorumlayıcısı olarak görev yapan bir sınıf TerminalExpression tanımlanır. Diğer sınıflar OrExpression , AndExpression , kombinasyonel ifadeler oluşturmak için kullanılır.

Demo sınıfımız InterpreterPatternDemo , kurallar oluşturmak ve ifadelerin ayrıştırılmasını göstermek için Expression sınıfını kullanacaktır .

Aşama 1

Bir ifade arayüzü oluşturun.

Expression.java

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

Adım 2

Yukarıdaki arayüzü uygulayarak somut sınıflar oluşturun.

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

Aşama 3

InterpreterPatternDemo , kurallar oluşturmak ve sonra bunları ayrıştırmak için Expression sınıfını kullanır .

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. adım

Çıkışı doğrulayın.

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