• 第十八章-备忘录模式


    备忘录(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
    Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分是,Originator可以根据保存的Memento信息还原到前一状态。

    图片

    图片

    #include<iostream>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    class RoleStateMemento
    {
    private:
    	int vit, atk, def;
    
    public:
    	RoleStateMemento(int vit_t, int atk_t, int def_t)
    	{
    		vit = vit_t, atk = atk_t, def = def_t;
    	}
    
    	int getVit() { return vit; }
    	void setVit(int vit_t) { vit = vit_t; }
    
    	int getAtk() { return atk; }
    	void setAtk(int atk_t) { atk = atk_t; }
    
    	int getDef() { return def; }
    	void setDef(int def_t) { def = def_t; }
    };
    
    class GameRole
    {
    private:
    	int vit;
    	int atk;
    	int def;
    public:
    	int getVit() { return vit; }
    	void setVit(int vit_t) { vit = vit_t; }
    
    	int getAtk() { return atk; }
    	void setAtk(int atk_t) { atk = atk_t; }
    
    	int getDef() { return def; }
    	void setDef(int def_t) { def = def_t; }
    
    	void StateDisplay()
    	{
    		cout << "角色当前状态:" << endl;
    		cout << "体力:" << vit << endl;
    		cout << "攻击力:" << atk << endl;
    		cout << "防御力:" << def << endl;
    	}
    
    	void GetInitState()
    	{
    		vit = 100, atk = 100, def = 100;
    	}
    
    	void Fight()
    	{
    		vit = 0, atk = 0, def = 0;
    	}
    
    	RoleStateMemento* SaveState()
    	{
    		return (new RoleStateMemento(vit, atk, def));
    	}
    
    	void RecoveryState(RoleStateMemento* memento)
    	{
    		vit = memento->getVit();
    		atk = memento->getAtk();
    		def = memento->getDef();
    	}
    };
    
    class RoleStateCaretaker
    {
    private:
    	RoleStateMemento* memento;
    
    public:
    	RoleStateMemento* getMemento() { return memento; }
    	void setMemento(RoleStateMemento* memento_t) { memento = memento_t; }
    };
    
    
    
    int main()
    {
    	GameRole* lixiaoyao = new GameRole();
    	lixiaoyao->GetInitState();
    	lixiaoyao->StateDisplay();
    
    	RoleStateCaretaker* stateAdmin = new RoleStateCaretaker();
    	stateAdmin->setMemento(lixiaoyao->SaveState());
    
    	lixiaoyao->Fight();
    	lixiaoyao->StateDisplay();
    
    	lixiaoyao->RecoveryState(stateAdmin->getMemento());
    	lixiaoyao->StateDisplay();
    
    
    
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    Boost之使用篇(1)
    Lucene 3.0.0细节初窥(1)深入探索Lucene的consumer与processor
    整理一点关于Lucene的学习资料, 方便自己与别人查看
    使用Lucene 3.0.0的结构遍历TokenStream的内容.
    [原创]如何写一个完善的c++异常处理类
    Lucene 3.0.0 的TokenStream与Analyzer
    Lucene 3.0.0 之样例解析(4)IndexFiles.java
    贝叶斯、概率分布与机器学习
    Lucene用c++重写的详细安排
    Lucene 3.0.0的细节初窥(2)研究在索引过程中的缓存
  • 原文地址:https://www.cnblogs.com/wfcg165/p/12035255.html
Copyright © 2020-2023  润新知