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的问题了。比方状态非常复杂的时候,那么设计这个模式自然就变得复杂了。

  • 相关阅读:
    你的程序员是在努力工作还是在偷懒?
    React 入门实例教程[阮一峰的网络日志] (分享)
    给大家分享下坐标转换的代码的JS和Python两个版本的源码【转】
    一个不错的 在线字体 网站
    用Python作GIS之一:介入STARS
    UI“三重天”之selenium--封装(二)
    UI“三重天”之Selenium(一)
    “点点点”的误区
    (转)CentOS 7安装Zabbix 3.4
    Ui"三重天"之重温Uiaumator(1)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5117304.html
Copyright © 2011-2022 走看看