의도
Context 클래스
AbstractExpression 클래스
TerminalExpression, NonterminalExpression 클래스
실행부분
UML - class 다이어그램
참고
- 사용자가 표현하기 쉬운 표현을 사용하게 하고 이를 해석하는 개체를 통해 약속된 알고리즘을 수행하는 패턴
- 해석이 필요한 언어가 존재하거나 추상 구문 트리로서 그 언어의 문장을 표현하고자 할 때
- 문법의 변경과 확장이 쉬움
- 문법의 구현이 용이
- 표현식을 해석하는 새로운 방법을 추가 할 수 있음
- 복잡한 문법은 관리하기 어려움
Context 클래스
class Context { public: Context(string str) : m_str(str) {}; const char* GetStr() { return m_str.c_str(); }; private: string m_str; };
AbstractExpression 클래스
class AbstractExpression { public: virtual void Interpret(Context* pContext) = 0; };
TerminalExpression, NonterminalExpression 클래스
class TerminalExpression : public AbstractExpression { public: void Interpret(Context* pContext) { cout << "TerminalExpression: " << pContext->GetStr() << endl; }; }; class NonterminalExpression : public AbstractExpression { public: void Interpret(Context* pContext) { cout << "NonterminalExpression: " << pContext->GetStr() << endl; }; };
실행부분
void main() { auto_ptr<Context> pContext(new Context("Context")); auto_ptr<AbstractExpression> pTerminal(new TerminalExpression()); pTerminal->Interpret(pContext.get()); auto_ptr<AbstractExpression> pNonterminal(new NonterminalExpression()); pNonterminal->Interpret(pContext.get()); }
UML - class 다이어그램
참고
- GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
- http://horajjan.blog.me/220330464407
- http://seungdols.tistory.com/entry/GoF%EC%9D%98-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%ED%96%89%EB%8F%99-%ED%8C%A8%ED%84%B4
- http://copynull.tistory.com/147