且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《设计模式解析(第2版•修订版)》—第1章 1.8节特殊对象方法

更新时间:2021-12-25 00:05:07

本节书摘来自异步社区《设计模式解析(第2版•修订版)》一书中的第1章,第1.8节特殊对象方法,作者【美】Alan Shalloway(艾伦•沙洛维) , James R.Trott(詹姆斯•R.特罗特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.8 特殊对象方法
设计模式解析(第2版•修订版)
创建和销毁

我已经讨论了可能被其他对象或对象自己调用的方法,但是当对象创建时到底发生了什么事情?当它消亡时又发生了什么?如果对象应该是自成一体的单位,那么它自己包含处理这些情况的方法,将是一个不错的主意。

这些特殊方法事实上确实存在,它们就是构造函数(constructor)和析构函数(destructor,或者终结方法,finalizer)。

构造函数负责初始化或创建一个对象

构造函数是对象创建时自动调用的一个特殊方法,它的目的是处理对象起始时的工作,这是对象“自己负责自己”所要求的。构造函数是一个进行初始化、设置默认信息、设定与其他对象关系或创建一个明确的对象所需的其他工作的天然场所。所有面向对象语言都会在创建对象时查找并执行相应的构造函数。

通过正确使用构造函数,可以更容易消除(或者至少最大程度地减少)未初始化变量,这种错误通常源于开发者的粗心大意。如果代码中有一个固定且一致的地方(即对象的构造函数)进行所有的初始化工作,可以更容易地确保初始化。未初始化变量所引起的错误很容易改正,但很难发现,因此这种约定(以及构造函数的自动调用)能够提高程序员的效率。

析构函数(终结方法)在对象不再需要时(已被删除时)将其清除

大多数面向对象语言都提供了对象不再存在时清除该对象的方式。在C++和C#中称之为析构函数,在Java中称之为终结方法。本书中,我将采用通用术语析构函数称呼这一概念。

所有面向对象语言都会在对象删除时查找并执行相应的析构函数。与构造函数一样,析构函数的使用也是对象“自己负责自己”所要求的。

析构函数通常用于在对象不再需要时释放资源。因为Java有垃圾收集机制(对象不再使用时自动清除)1,析构函数在Java中不像C++中那么重要。在C++中,由对象的析构函数负责销毁只由这个对象使用的其他对象是很常见的。

1.NET语言亦然,包括C#、VB.NET和C++/CLI等。——译者注

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。