بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Interpreter

الگوی Interpreter، روشی برای ارزیابیِ دستور زبان یا عبارتِه. این نوع از الگو، زیرگروه الگوی رفتاری (behavioral) محسوب میشه. این الگو شامل پیاده سازیِ یک رابطِ عبارتیِه که دستور تفسیر یک متن خاص را میده. این الگو در تجزیه و تحلیل SQL، موتور پردازشِ نشانه و غیره به کار رفته.

پیاده سازی

در این بخش رابطی به نام Expression و کلاس های concreteای که رابطِ Expression را پیاده سازی می کنن، ایجاد می کنیم. کلاسِ TerminalExpression که بعنوان مفسر اصلیِ متن در سؤال به کار میره را نیز تعریف می کنیم. کلاس های OrExpression و AndExpression هم برای ایجاد عبارات ترکیبی به کار میرن.

InterpreterPatternDemo، در نسخه ی آزمایشیِ کلاس مان، از کلاس Expression برای ایجاد قوانین و نشان دادن تجزیه و تحلیل عبارات استفاده خواهیم کرد.

interpreter pattern uml diagram

مرحله ی 1

ایجاد یک رابط به نام expression.

expression.java

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

مرحله ی 2

ایجاد کلاس های concrete که رابطِ بالا را پیاده سازی می کنن.

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

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

مرحله ی 4

بررسی خروجی

John is male? true
Julie is a married women? true
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد