天天看點

《設計模式解析(第2版•修訂版)》—第1章 1.8節特殊對象方法

本節書摘來自異步社群《設計模式解析(第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等。——譯者注

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。