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

  • 相关阅读:
    通用应用程序设计
    咫尺与天涯
    SQL SERVER 自定义函数 split
    asp.net 页面实践执行顺序
    asp.net UpdatePanel 不能局部刷新问题汇总
    DataGrid GridView 单页javascript 表头排序
    存储过程分页方案
    数据库名、数据表名、字段名、主键、标识列相关查询
    c# web 缓存管理
    js笔记---拖动元素
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5117304.html
Copyright © 2011-2022 走看看