需求:某個型別的例項在程式的記憶體中只有1個,即類只例項化一次
實現 1 雙層if 加鎖 賴漢式單例
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace singleton
////// 靜態變數 在我們的程式中有 而且 僅有1個
///private
static singleton _singleton = null;
////// 保證執行緒安全
///private
static
object singleton_lock = new
object();
////// 通過靜態方法,上端呼叫
//////
public
static singleton createinstance()}}
return _singleton;
}private
int i = 0;
public
void
show()
console.writeline("這裡是singleton.show,", i);}}
}
上端呼叫
實現2
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace singleton
////// 靜態變數 在我們的程式中有 而且 僅有1個
/// 靜態物件會在第一次呼叫類的任何方式之前被初始化,而且靜態物件只會初始化一次
///private
static singleton2 _singleton = new singleton2();
////// 通過靜態方法,上端呼叫
//////
public
static singleton2 createinstance()
private
int i = 0;
public
void
show()
console.writeline("這裡是singleton.show,", i);}}
}
上端呼叫
實現3
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace singleton
////// 任何乙個類,最多只能有乙個無引數的靜態建構函式
/// 該函式會在這個類第一次使用之前,被clr呼叫,而且只呼叫一次,靜態建構函式在程式中只執行一次
///static singleton3()
private
static singleton3 _singleton = null;
public
static singleton3 createinstance()
private
int i = 0;
public
void
show()
console.writeline("這裡是singleton.show,", i);}}
}
上端呼叫
補充2句
普通物件 用完了 系統會釋放 再new 又是乙個新的
單例物件 用完了 系統永遠也不會釋放
單例模式 在多執行緒中 對競爭性資源的操作 該加鎖還是要加 因為單例的執行緒並不是安全的
java設計模式之單列模式(Singleton)
本篇只是簡單介紹單列模式,主要是讓初學者理解單列模式,各種加鎖 多實現 業務場景待以後補充。關鍵字 只產生乙個例項,構造器私有化。構造器私有化 private 是為了禁止singleton類外部呼叫建構函式。如果從singleton類以外的 中呼叫建構函式 new singleton 就會出現編譯錯...
設計模式 單列模式
何為設計模式呢?簡單的說就是能重複利用的解決方案,當碰到a專案也出現這種情況,b專案也出現這種情況 那麼是否能把這懂實現功能抽象出來,形成一種解決方案.單列模式 顧名思義就是乙個例項 即乙個物件只能初始化一次 作用 減少開闢記憶體空間,節約記憶體開銷 class program 因為a物件在記憶體堆...
設計模式 單列模式
原文 單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候...