2009年4月14日星期二

资源的生命期

在C++ 语言中,特别注意对资源的管理。写构造函数、析构函数时都要仔细考虑类中各种资源的初始化和释放的问题。
什么是资源?任何一个对象的实例也可以理解为资源,因为它至少占用了内存。我想说的资源是诸如:数据库连接、socket连接 这样的对象、线程对象、文件句柄、IO端口... ...这种资源不仅占据本程序的资源(内存、CPU运算)而且还占用外部系统的能力,而这些外部系统的能力了往往并不是无限的。是资源的东西,同时也意味着被动的东西。资源天生就是被用来管理、使用的。

在Java的项目中,因为java的垃圾回收机制,在类的级别我们确实不用操心太多。但是,就程序的结构上,我们必须要确切的知道我的程序中到底有哪些资源。一般情况下我们必然会有对某种资源的管理类。这个类负责资源的生命期。有些资源根据某些策略也许需要lazy-initialization,有些需要提前的hungry-initialization。但是如论如何,在程序的任何运行阶段我们要对这种资源的使用心里有数。我们可以构建ResourceManager来管理程序中的所有资源。
这样,当我们按下“暂停”“停止”“restart”这样的按钮时就可以很容易的通过resource manager来对资源进行管理。
当然,如果你的程序不是关键应用,可以不断重启,那么不必太关心resource。但是,这样的程序会给以后的维护和修改设置障碍。

这个看似简单的论述,如果不能再设计阶段进行考虑的话,也会带来混乱。相反,程序就很好维护、易懂。