Latest web development tutorials

통역 패턴

인터프리터 패턴 (인터프리터 패턴) 모델 형에 속하는 표현 구문 또는 언어를 평가하는 방법을 제공한다. 이 모드는, 특정 콘텍스트를 설명하는 식 인터페이스를 구현한다. 이 모델은 SQL 구문 분석에 기호 처리 엔진을 사용한다.

소개

의도 : 언어 감안할 때, 그 문법 표현을 정의하고 통역을 정의, 인터프리터 언어로 문장을 해석하는 로고를 사용합니다.

주요 솔루션 : 통역을 설명하는 문장을 구성하는 몇 가지 고정 문법하십시오.

사용할 때 문제가 특정 유형의 주파수가 충분히 높은 경우,이 문제의 각 인스턴스는 언어의 단문로 표현 가치가있을 수있다.통역을 구축 할 수 있도록, 인터프리터는이 문장을 해석하여 문제를 해결합니다.

해결 방법 : 멤버 구문 트리, 종료 및 비 터미널의 정의를.

키 코드 : 멤버 클래스 환경은 일부 글로벌 정보의 HashMap 일반적으로, 외부 인터프리터가 포함되어 있습니다.

적용 예 : 컴파일러, 연산 식 평가.

장점 : 1, 더 나은 확장 성 및 유연성.2 발현을 해석하는 새로운 방법을 추가했습니다. 3 쉽고 간단한 문법을 ​​구현한다.

단점 : 1, 장면의 장점은 상대적으로 작은 수 있습니다.복잡한 2. 유지 관리가 더 어려운 문법. 3 모드가 클래스를 확장하게됩니다 설명합니다. 4 재귀 메소드 호출을 이용하여 모드를 설명한다.

사용 시나리오 : 1 언어 문장은 추상 구문 트리로 표현되어야 해석 될 수있다.도 2는 반복적 인 문제 중 일부 표현하는 간단한 언어 일 수있다. 3, 간단한 문법 장면을 설명합니다.

참고 : 대신 expression4J 수 있습니다 발생하는 경우가상대적으로 작은 장면, JAVA를 사용할 수 있습니다.

실현

우리는 생성하고 인터페이스표현 엔티티 클래스 인터페이스를 구현합니다.TerminalExpression주체 통역자의 문맥에서 정의 된 바와 같다. 다른 클래스는 모듈 식을만들기위한,AndExpression을OrExpression.

InterpreterPatternDemo,우리의 데모 클래스는 구문 분석 규칙 및 프리젠 테이션 식을 만드는식의클래스를 사용합니다.

통역 패턴 UML 다이어그램

1 단계

식 인터페이스를 만듭니다.

Expression.java

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

2 단계

생성 엔티티 클래스는 상기 인터페이스를 구현한다.

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 규칙을만들고이를 해결하기 위해식 클래스를 사용합니다.

InterpreterPatternDemo.java

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

4 단계

출력을 확인합니다.

요한은 남성인가? 참
줄리는 기혼 여성? True입니다