State_Pattern - 8BitsCoding/RobotMentor GitHub Wiki
์ ์
๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๊ฐ๊ฐ์ ํ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ์บก์ํ ํ๋ค.
๋์ ์ผ๋ก ํ๋์ ๊ต์ฒดํ ์ ์๋ค.
์์๋ก ์ค๋ช
๋ชฌ์คํฐ๋ผ๋ ์ค๋ธ์ ํธ๊ฐ ์๊ณ ๊ทธ ์ํ๋ฅผ ์ํ ํจํด์ผ๋ก ๊ด๋ฆฌ ํ๊ณ ์ถ๋ค.
int main() {
๋ชฌ์คํฐ* pMonster = new ๋ชฌ์คํฐ(new ์ด๋());
pMonster->์ฒ๋ฆฌ();
pMonster->์ํ๋ณ๊ฒฝ(new ๊ณต๊ฒฉ());
pMonster->์ฒ๋ฆฌ();
pMonster->์ํ๋ณ๊ฒฝ(new ์์ดํ
์ค๊ธฐ());
pMonster->์ฒ๋ฆฌ();
delete pMonster;
return 0;
}
class ๋ชฌ์คํฐ {
public:
๋ชฌ์คํฐ(์ํ_์ธํฐํ์ด์ค* state) : pState(state) {}
~๋ชฌ์คํฐ{ if(pState delete pState; )}
void ์ํ๋ณ๊ฒฝ(์ํ_์ธํฐํ์ด์ค* state) {if(pState) delete pState; pState = state;}
void ์ฒ๋ฆฌ() {pState->์ฒ๋ฆฌ();}
private:
์ํ_์ธํฐํ์ด์ค* pState;
};
// ์ํ ์ธํฐํ์ด์ค ํด๋์ค
class ์ํ_์ธํฐํ์ด์ค
{
public:
virtual void ์ฒ๋ฆฌ() = 0;
};
//------------------------------------------------------------------
// ์ด๋ ํด๋์ค
class ์ด๋ : public ์ํ_์ธํฐํ์ด์ค
{
public:
void ์ฒ๋ฆฌ() override { cout << "์ด๋" << endl; }
};
//------------------------------------------------------------------
// ๊ณต๊ฒฉ ํด๋์ค
class ๊ณต๊ฒฉ : public ์ํ_์ธํฐํ์ด์ค
{
public:
void ์ฒ๋ฆฌ() override { cout << "๊ณต๊ฒฉ" << endl; }
};
//------------------------------------------------------------------
// ์์ดํ
์ค๊ธฐ ํด๋์ค
class ์์ดํ
์ค๊ธฐ : public ์ํ_์ธํฐํ์ด์ค
{
public:
void ์ฒ๋ฆฌ() override { cout << "์์ดํ
์ค๊ธฐ" << endl; }
};