分类: C/C++
2008-04-23 22:00:57
COM 组件设计与应用(十七)——持续性
作者:
一、前言
我们写程序,经常需要实现这样的需求:
例一、程序运行产生一个窗口,用户关闭的时候需要记录窗口的位置,以便下次运行时保持位置不变;
例二、由于程序运行时间很长,今天执行一部分,明天继续执行。那么在下次运行前要恢复前次的状态;
... ... ... ...
智慧的老师:以上这些需求,如何实现呢?
懵懂的学生:这个简单,只要在程序退出前提取必要的信息保存到文件中,下次运行时再从文件中读出来,设置一下就OK了。
智慧的老师:恩,不错,这位同学的思想值得表扬。
懵懂的学生:不好意思,这都要感谢老师的栽培,我对您的景仰如滔滔江水......
智慧的老师:别臭P了,我话还没有说完那......如果你需要提取和保存的信息很多,结构很复杂......怎么办?
懵懂的学生:也好办,我设计一个结构来记录这些信息。
智慧的老师:恩......不错。但如果这些信息提供方是别人写的模块,并且随着版本的不同还经常变化,你怎么办?
懵懂的学生:... ...
智慧的老师:解决这些问题的方法是---持续性。
二、原理
持续性,也叫永久性。组件方提供
IPersistXXX 接口,调用者(容器)提供存储介质,比如文件啦、内存啦、注册表啦、流啦、文本啦......啦啦拉。需要保存的时候,调用者通过
IPersistXXX::Save()
接口函数让组件去自己存储属性信息,而调用者根本不用关心存储格式和存储内容;需要还原状态的时候,调用者打开存储介质,然后同样调用
IPersistXXX::Load() 接口函数让组件自己去读取属性信息并完成初始化的设置。
目前,微软定义了如下各种类型的持续性接口,足够满足你的需求了。我们只要在自己写的组件中实现其中一个或几个持续性接口,那么调用者就可以按照统一的方式和我们的组件协商完成属性信息的保存和状态还原了。
持续性接口
给主人留下些什么吧!~~
|