Memeto_Pattern - 8BitsCoding/RobotMentor GitHub Wiki

์ •์˜

๊ฐ์ฒด์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅ ๋ฐ ๋ณต์›ํ•˜๋Š” ํŒจํ„ด

๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ์ •๋ณด๋งŒ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ, ์ €์žฅํ•  ์ƒํƒœ์ •๋ณด๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ๋ฐ”๋‘‘, ์žฅ๊ธฐ ๋“ฑ ๊ธฐ๋ณด ๋˜์‚ด๋ฆฌ๊ธฐ, ๋ฐ”๋‘‘ ๋ฌผ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ๋“ฑ์„ ๊ผฝ์„ ์ˆ˜ ์žˆ๋‹ค.


์ด๋ฏธ์ง€1

void main() {
    Caretaker mCaretaker;
    Originator* originator = new Originator();

    originator->setState(_T("state1"));
    mCaretaker.pushMemento(originator->createMemento());

    originator->setState(_T("state2"));
    mCaretaker.pushMemento(originator->createMemento());

    originator->setMemeto(mCaretaker.popMemento());
    originator->setMemeto(mCaretaker.popMemento());

    delete originator;
}
//------------------------------------------------------------------
// Caretaker ํด๋ž˜์Šค (Memento ๊ด€๋ฆฌ)
class Caretaker
{
public:
    void pushMemento(Memento* m) { mStack.push(m); }
    Memento* popMemento() { Memento* m = mStack.top(); mStack.pop(); return m; }
 
private:
    stack<Memento*> mStack;
};
// Originator ํด๋ž˜์Šค
class Originator
{
public:
    void setState(tstring _state) 
    { 
        state = _state;
        wcout << _T("Originator: Setting state to ") << state << endl;
    }
 
public:
    void setMemento(Memento *m) 
    {
        if (m) 
        {
            state = m->getState(); 
            delete m; 
            wcout << _T("Originator: State after restoring from Memento ") << state << endl; 
        } 
    }
 
    Memento* createMemento() 
    {
        wcout << _T("Originator: Create to Memento ") << state << endl;
        return new Memento(state); 
    }
 
private:
    tstring state;
};
// Memento ํด๋ž˜์Šค
class Memento
{
public:
    Memento(tstring _state) { state = _state; }
 
public:
    tstring getState() const { return state; }
 
private:
    tstring state;
};

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

โš ๏ธ **GitHub.com Fallback** โš ๏ธ