Memeto_Pattern - 8BitsCoding/RobotMentor GitHub Wiki
๊ฐ์ฒด์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅ ๋ฐ ๋ณต์ํ๋ ํจํด
๊ฐ์ฒด์ ๋ด๋ถ ์ํ์ ๋ณด๋ง ๊ฐ์ง๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ์์ฑํ์ฌ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ, ์ ์ฅํ ์ํ์ ๋ณด๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
๋ํ์ ์ธ ์๋ก ๋ฐ๋, ์ฅ๊ธฐ ๋ฑ ๊ธฐ๋ณด ๋์ด๋ฆฌ๊ธฐ, ๋ฐ๋ ๋ฌผ๋ฆฌ๊ธฐ ๊ธฐ๋ฅ๋ฑ์ ๊ผฝ์ ์ ์๋ค.
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;
};