Mementoパターン
「Memento=記念品」
という事で、記念品パターンです。
って何のこっちゃですよね。
Mementパターンは、カプセル化を保ったままクラスオブジェクトの状態をセーブして復元するためのパターンです。
書いてみよ
// キャラ
class Chara
{
public:
Chara()
{
m_Hp = 55555;
m_Mp = 100;
}Chara(Memento* m)
{
SetMemento(m);
}~Chara(){}
Memento* CreateMemento()
{
Memento* m = new Memento;
m->m_Hp = m_Hp;
m->m_Mp = m_Mp;
return m;
}void SetMemento(Memento* m)
{
m_Hp = m->m_Hp;
m_Mp = m->m_Mp;
}private:
int m_Hp;
int m_Mp;
};// 記念品
class Memento
{
// セーブ・ロードユニットのみ作成可能
friend class Chara;
// 外部からMementoオブジェクトを生成出来ないようにしましょう。
private:
Memento(){}
// 殺すのはどこでもOK
public:
~Memento(){}
private:
int m_Hp;
int m_Mp;
};// main
int main()
{
// キャラ作る
Chara* pChara = new Chara;// ここで記念品を作っておく
Memento* pMemento = pChara->CreateMemento();// キャラ殺す
delete pChara;
// ここで記念品を使ってキャラを作り直す。
// 殺す前のキャラと同じパラメータを持つものが出来上がる。
pChara = new Chara(pMemento);// 記念品を捨てる
delete pMemento;// キャラ殺す
delete pChara;// さいなら
return 0;
}
記念品というよりもDNAですね。個人的に。