1) 개요
문법 규칙을 클래스화 한 구조로, 일련의 규칙으로 정의된 문법적 언어를 해석하는 패턴입니다.(SQL, SHELL...) 인터프리터 패턴은 SQL과 같은 계층적 언어를 해석하기 위해 계층 구조를 표현할 수 있습니다.
- 장점
1. 문법의 추가 및 수정, 구현이 쉬워집니다.
- 단점
1. 복잡한 문법의 경우 관리 및 유지가 어려워집니다.
2) UML
- AbstractExpression : interpret()를 정의 합니다.
- TerminalExpression : interpret()를 구현합니다
- NonTerminalExpression : Non-Terminal의 interpret()를 구현합니다.
- Context : String 표현식이어야 하며, 인터프리터에 보내는 정보입니다.
- Client : interpret()를 호출합니다.
3) 예제
1 2 3 4 | public interface Expression { boolean interpreter(String con); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class TerminalExpression implements Expression{ String data; public TerminalExpression(String data) { this.data = data; } @Override public boolean interpreter(String con) { if(con.contains(data)) return true; else return false; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class OrExpression implements Expression{ Expression expr1; Expression expr2; public OrExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } public boolean interpreter(String con) { return expr1.interpreter(con) || expr2.interpreter(con); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class AndExpression implements Expression{ Expression expr1; Expression expr2; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpreter(String con) { return expr1.interpreter(con) && expr2.interpreter(con); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Main { public static void main(String[] args) { Expression person1 = new TerminalExpression("Kushagra"); Expression person2 = new TerminalExpression("Lokesh"); Expression isSingle = new OrExpression(person1, person2); Expression vikram = new TerminalExpression("Vikram"); Expression committed = new TerminalExpression("Committed"); Expression isCommitted = new AndExpression(vikram, committed); System.out.println(isSingle.interpreter("Kushagra")); System.out.println(isSingle.interpreter("Lokesh")); System.out.println(isSingle.interpreter("Achint")); System.out.println(isCommitted.interpreter("Committed, Vikram")); System.out.println(isCommitted.interpreter("Single, Vikram")); } } | cs |
'IT > 디자인 패턴(Design Pattern)' 카테고리의 다른 글
[디자인 패턴] 팩토리 메소드 패턴(Factory Method Pattern) (0) | 2019.02.19 |
---|---|
[디자인 패턴] 옵저버 패턴(Observer Pattern) (0) | 2019.02.15 |
[디자인 패턴] 전략 패턴(Strategy Pattern) (0) | 2019.02.15 |
[디자인 패턴] 상태 패턴(State Pattern) (0) | 2019.02.15 |
[디자인 패턴] 템플릿메소드 패턴(TemplateMethod Pattern) (0) | 2019.02.14 |