티스토리 뷰

프로그램을 작성하다보면, 객체간에 동적으로 결합이 필요한 경우가 많습니다. 객체간에 동적으로 결합/해제를 통해서 기능을 추가/제거 하는 것을 데코레이터 패턴이라고 합니다.


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

'Software Engineering > Design Pattern' 카테고리의 다른 글

Reactor 패턴과 Proactor 패턴  (0) 2014.08.05
Design Pattern Quick Reference  (0) 2011.02.10
커맨드 패턴 (Command)  (0) 2008.02.09
플라이웨이트 패턴 (Fly Weight)  (0) 2008.02.09
프록시 패턴 (Proxy)  (0) 2008.02.09
댓글