單例模式是一種常見的設計模式,可以使得某個類只有乙個例項,自己建立該類例項並向外界提供該例項。在某些條件下,使用單例模式可以控制類例項的數量,達到節約資源的目的,同時由於只有乙個例項,可以實現通訊的功能以及資源共享,不僅如此,單例模式配合執行緒的同步可解決併發訪問中的安全問題。
在一些優先考慮安全性的程式中可以嘗試使用單例。
單例模式的缺點是非常明顯的,降低程式的併發性,增加模組之間的耦合,所以單例的使用需要謹慎。
根據例項建立的時機可以分為兩類: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方法負責檢驗並例...