320x100
구조
#pragma once
#include <iostream>
#include <set>
#include <string>
class State
{
public:
virtual void handle() = 0;
};
class Context
{
private:
State* state_;
public:
Context(State* state)
{
state_ = state;
}
void changeState(State* state)
{
state_ = state;
}
void request() {
state_->handle();
}
};
class StateA : public State
{
public:
void handle() override
{
std::cout << "StateA";
}
};
class StateB : public State
{
void handle() override
{
std::cout << "StateB";
}
};
사용
int main()
{
StateA* stateA = new StateA;
StateB* stateB = new StateB;
Context* context = new Context(stateA);
context->request();
context->changeState(stateB);
context->request();
system("pause");
return 0;
}
어느 객체(Context)가 상태 객체(State의 파생 클래스)를 멤버로 들고 있고, Context는 그저 멤버의 함수를 실행시키는 역할만 한다. 그 함수 안에 무슨 동작을 할지는 내부 State 객체가 어느 객체가 등록되어있는지에 따라 달라진다.
320x100
'프로그래밍 > GoF' 카테고리의 다른 글
[행동 패턴] - 방문자(Visitor) (0) | 2022.01.09 |
---|---|
[행동 패턴] - 전략(Strategy) (0) | 2022.01.08 |
[행동 패턴] - 감시자(Observer) (0) | 2022.01.08 |
[행동 패턴] - 메멘토(Memento) (0) | 2022.01.08 |
[행동 패턴] - 반복자(Iterator) (0) | 2022.01.06 |