Singleton單例模式

2021-08-03 18:35:24 字數 1774 閱讀 9307

單例模式是一種常見的設計模式,可以使得某個類只有乙個例項,自己建立該類例項並向外界提供該例項。

在某些條件下,使用單例模式可以控制類例項的數量,達到節約資源的目的,同時由於只有乙個例項,可以實現通訊的功能以及資源共享,不僅如此,單例模式配合執行緒的同步可解決併發訪問中的安全問題。

在一些優先考慮安全性的程式中可以嘗試使用單例。

單例模式的缺點是非常明顯的,降低程式的併發性,增加模組之間的耦合,所以單例的使用需要謹慎。

根據例項建立的時機可以分為兩類:lazy-load、非lazy-load。

/**

* 單例模式

* 當類載入時建立單例例項

* * 優點:不需要考慮併發

* 缺點:類載入後不獲取單例物件會造成記憶體浪費

*/public

final

class

ivorytower

/*** 靜態屬性

*/private

static

final ivorytower instance = new ivorytower();

/*** 靜態方法

**@return 單例例項

*/public

static ivorytower getinstance()

}

/**

* 執行緒安全的單例類

* 例項是惰性初始化的,因此需要同步

* * 注意:如果通過反射建立,那麼在同乙個類載入器中不會建立單例物件,而是多個例項

*/public

final

class

threadsafelazyloadedivorytower else

} /**

* 只有在第一次呼叫例項時才會建立例項。延遲載入

*/public

static

synchronized threadsafelazyloadedivorytower getinstance()

return instance;

}}

/**

* 利用靜態內部類實現lazy-load的單例模式

*/public

final

class

initializingondemandholderidiom

/*** 靜態方法

**@return 單例例項

*/public

static initializingondemandholderidiom getinstance()

/*** 靜態內部類

*/private

static

class

helperholder

}

/**

* double check locking

*/public

final

class

threadsafedoublechecklocking

} /**

* 靜態方法

**@return 單例例項

*/public

static threadsafedoublechecklocking getinstance() }}

return result;

}}

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...