//객체의 상태를 변경하는 설계 기법 - 상태(state) 패턴
#include <iostream>
using namespace std;
// 상태에 따른 동작을 정의하는 인터페이스를 정의한다
struct IState {
virtual ~IState() {}
virtual void runImpl() = 0;
virtual void attackImpl() = 0;
};
class Character {
int hp;
IState *state;
public:
void setState(IState* p) { state = p; }
void run() { state->runImpl(); }
void attack() { state->attackImpl(); }
};
class NormalCharacter : public IState {
public:
void runImpl() { cout << "NormalCharacter::Run" << endl; }
void attackImpl() { cout << "NormalCharacter::Attack" << endl; }
};
class Item1Character : public IState {
public:
void runImpl() { cout << "Item1Character::Run" << endl; }
void attackImpl() { cout << "Item1Character::Attack" << endl; }
};
int main() {
Character c;
NormalCharacter nc;
c.setState(&nc);
c.run();
getchar();
//아이템이 적용된 케릭터
Item1Character ic;
c.setState(&ic);
c.run();
}
'Developer > Design Patterns' 카테고리의 다른 글
함수 포인터 기반의 이벤트 핸들링 기법 (0) | 2014.05.18 |
---|---|
인터페이스 기반의 객체의 이벤트 처리 (0) | 2014.05.18 |
Strong Pointer & Weak Pointer (0) | 2014.05.18 |
Proxy Pattern을 이용한 스마트포인터 방식 (0) | 2014.05.18 |
참조계수 방식의 스마트 포인터 (0) | 2014.05.18 |