출처 : 녹두로님

슈퍼 마리오 게임이 있음!
획득하는 아이템의 종류에 따라 달리기와 공격이 달라진다고 하면 이러한 코드를 작성할 수 있음.
#include <iostream>
using namespace std;
class character
{
public :
int item;
public :
character() : item(1)
{}
void SetItem(int _item)
{
item = _item;
}
void run()
{
switch (item)
{
case 1 :
cout << "run" << endl;
break;
case 2 :
cout << "fast run" << endl;
break;
}
}
void attack()
{
switch (item)
{
case 1:
cout << "attack" << endl;
break;
case 2:
cout << "power attack" << endl;
break;
}
}
};
int main(void)
{
character* mario = new character;
mario->attack();
mario->run();
mario->SetItem(2);
mario->attack();
mario->run();
}
: 객체 자체가 변경되는 것이 아닌, 새로운 객체가 생성되고,
그것을 참조하고 있는 것임.
이렇게 되면 메모리를 해제하고 다시, 새로운 객체를 참조 하는 것이 나을 듯.

상태를 나타내는 인터페이스 클래스를 만들고, 이를 이용해
run, attack을 새롭게 정의하는 클래스를 만들어라.
결과
상태로 사용된, 지역 객체 p와 s에 대한 메모리 해제에 대한
걱정을 할 필요가 없음.


-> 객체에 의한 변화 이다.
: 클래스 다이어 그램은 동일함.
의도가 다름.
상태 패턴은 동작을 변경하는 것이고, 전략 패턴은 알고리즘을 변경하는 것임.