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; }
};

์ฐธ๊ณ ์‚ฌ์ดํŠธ