GamePlayer 클래스와 GameLevel 및 그 하위 클래스들은 모두 동일한 인터페이스를 가지고 있는데, 이는 GamePlayer 객체에 각기 다른 유형의 공격 요청이 주어졌을 때 이에 대한 처리를 GameLevel 및 그 하위 클래스에게 위임시키기 위한 것이다. 이때 GamePlayer 객체가 공격 요청을 위임시키기 위한 방법으로는 내부적으로 관리하고 있는 GameLevel 포인터 객체를 통해 다형성(Polymorphism)을 적용시키는 것이다.
추가된 상태를 포함해서 객체의 상태 변화 시 기존 소스코드 변경없이 행위 수행 변경이 가능하도록 객체 상태 정보를 클래스 상속 구조로 정의해서 사용하는 방식을 State 패턴이라고 한다.
#include "stdafx.h"
#include <iostream> #include <string> using namespace std;
////////////////////////////////////////////////////////////////////////// class ClockTime : public Subject { public: ClockTime() {}
virtual int GetHour() { return 0; } virtual int GetMinute() { return 0; } virtual int GetSecond() { return 0; }
void Tick(); };
void ClockTime::Tick() { Notify(); }
////////////////////////////////////////////////////////////////////////// class Output { public: Output() {} virtual ~Output() {}
void Draw() { printf("Output....\n"); } };
////////////////////////////////////////////////////////////////////////// class DigitalClock : public Output, public Observer { public: DigitalClock(ClockTime*); virtual ~DigitalClock();