Software Engineering/Design Pattern
데코레이터 패턴 (Decorator)
엘키
2008. 2. 9. 14:12
프로그램을 작성하다보면, 객체간에 동적으로 결합이 필요한 경우가 많습니다. 객체간에 동적으로 결합/해제를 통해서 기능을 추가/제거 하는 것을 데코레이터 패턴이라고 합니다.
class LogDecorator { public: void Log(char *str, ...); }; class Game { LogDecorator *m_pLogDecorator; public: void Start() { if(m_pLogDecorator) m_pLogDecorator->Log("Game::Start() ..."); //게임시작처리 } void End() { if(m_pLogDecorator) m_pLogDecorator->Log("Game::End() ..."); //게임종료처리 } void SetLog(LogDecorator *pLogDecorator) { m_pLogDecorator = pLogDecorator; } };
Game클래스를 보면, LogDecorator 클래스가 결합되었을 때에만 로그를 기록하도록 되어있습니다.
Game클래스는 LogDecorator 클래스를 통해서 기능이 추가/제거 되는데, 이처럼 동적으로 객체간의 결합을 통해 기능이 확장 되는 것을 데코레이터 패턴이라고 합니다.