Design Pattern Memo 备忘录设计模式
2016-01-09 21:17
381 查看
本设计模式就是简单地记录当前状态。然后利用记录的数据恢复。
比方首先我们有一个类。类须要记录当前状态进行相关的工作的:
这里面的state能够是随意定义的数据,依据实际情况而定。
然后我们依据这个state设计一个能够保持state数据的类:
以下是详细的保持和恢复数据的方法:
然后看看主函数。我们就能够利用这两个保持和恢复数据的方法来进行状态之间的转换,然后能够恢复到之前的状态:
整体来说这是个很easy的设计模式了。
我认为事实上这个设计模式全然能够使用一般非类的方法来记录状态的,可是当数据量很大的时候,使用memo类能够简化代码,而且使用类能够更加方便记住这些数据。由于这些数据都和一个类连起来了。
假设要把这个设计模式变的复杂起来。那么就是这个state的问题了。比方状态非常复杂的时候,那么设计这个模式自然就变得复杂了。
比方首先我们有一个类。类须要记录当前状态进行相关的工作的:
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<<"\nThe current state:\n"; human.show(); Memo *m = human.makeMemo(); cout<<"\nThe memo saved state:\n"<<m->state<<endl; cout<<"\nHuman set to new state:\n"; human.state = "Handle distraction"; human.show(); cout<<"\nNow we use memo to restor previouse info.\n"; human.restroDataFromMemo(m); human.show(); delete m; return 0; }
整体来说这是个很easy的设计模式了。
我认为事实上这个设计模式全然能够使用一般非类的方法来记录状态的,可是当数据量很大的时候,使用memo类能够简化代码,而且使用类能够更加方便记住这些数据。由于这些数据都和一个类连起来了。
假设要把这个设计模式变的复杂起来。那么就是这个state的问题了。比方状态非常复杂的时候,那么设计这个模式自然就变得复杂了。
相关文章推荐
- 【php】error_reporting
- JSP的学习(7)——九大隐式对象之pageContext对象
- Matlab多项式回归实现
- 解决在Azure 部署SharePoint2013 数据服务器拒绝连接和域连接出现的问题
- C++ DirectX 游戏开发初级视频教程 05 资源下载链接
- ssh服务
- Python中安装以及配置easy_install
- rubygem 国内镜像 解决gem install rails 连接超时的问题
- Fragment详解之五——Fragment间参数传递
- 机器学习(五):Logistic回归
- Struts2 基于XML校验的一些特点
- 使用包含自定义动作的隐式Intent
- 特征选择(四)-分散度
- Hibernate
- ASP.NET配置文件里经常使用到的节点信息
- Linux cmus
- Fragment详解之四——管理Fragment(2)
- json chart 整合,JQERY发异步请求,json chart使用等
- 扯淡
- 使用updatePanel从服务器调用方法