zoukankan      html  css  js  c++  java
  • Design Pattern Memo 备忘录设计模式

    本设计模式就是简单地记录当前状态。然后利用记录的数据恢复。

    比方首先我们有一个类。类须要记录当前状态进行相关的工作的:

    class Memo;
    
    class Human
    {
    public:
    	string state;
    	Memo *makeMemo();
    	void restroDataFromMemo(Memo *m);
    	void show()
    	{
    		cout<<"State: "<<state<<endl;
    	}
    };

    这里面的state能够是随意定义的数据,依据实际情况而定。

    然后我们依据这个state设计一个能够保持state数据的类:

    class Memo
    {
    public:
    	string state;
    	Memo(string s) : state(s){}
    };

    以下是详细的保持和恢复数据的方法:

    Memo *Human::makeMemo()
    {
    	return new Memo(state);
    }
    
    void Human::restroDataFromMemo(Memo *m)
    {
    	state = m->state;
    }

    然后看看主函数。我们就能够利用这两个保持和恢复数据的方法来进行状态之间的转换,然后能够恢复到之前的状态:

    int main()
    {
    	Human human;
    	human.state = "Get Ready";
    	cout<<"
    The current state:
    ";
    	human.show();
    
    	Memo *m = human.makeMemo();
    	cout<<"
    The memo saved state:
    "<<m->state<<endl;
    
    	cout<<"
    Human set to new state:
    ";
    	human.state = "Handle distraction";
    	human.show();
    
    	cout<<"
    Now we use memo to restor previouse info.
    ";
    	human.restroDataFromMemo(m);
    	human.show();
    
    	delete m;
    	return 0;
    }



    整体来说这是个很easy的设计模式了。

    我认为事实上这个设计模式全然能够使用一般非类的方法来记录状态的,可是当数据量很大的时候,使用memo类能够简化代码,而且使用类能够更加方便记住这些数据。由于这些数据都和一个类连起来了。

    假设要把这个设计模式变的复杂起来。那么就是这个state的问题了。比方状态非常复杂的时候,那么设计这个模式自然就变得复杂了。

  • 相关阅读:
    angular 写 文字省略显示指令
    REACT 学习之一:普通表单过滤
    怎么能够做到实时的邮件监听-- 求指点
    C++实现Behavioral
    private virtual in c++
    接口污染
    C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)
    c++ override 关键字
    virtual function c++
    删完垃圾代码2
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5117304.html
Copyright © 2011-2022 走看看