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 클래스를 통해서 기능이 추가/제거 되는데, 이처럼 동적으로 객체간의 결합을 통해 기능이 확장 되는 것을 데코레이터 패턴이라고 합니다.