單例模式就是指單例類(lèi)在一定的生命周期內(nèi)只能有一個(gè)對(duì)象實(shí)例,單例類(lèi)的創(chuàng)建必須是本身,并能給使用者提供自身。
介紹
在現(xiàn)實(shí)世界中,每個(gè)生命體都可以被看做是一個(gè)單例對(duì)象,唯一且具體,具有不可復(fù)制性。同樣的,在軟件開(kāi)發(fā)領(lǐng)域中,有時(shí)我們需要保證客戶(hù)端在當(dāng)前的客戶(hù)機(jī)上只能運(yùn)行一個(gè)實(shí)例這個(gè)時(shí)候,我們就應(yīng)該考慮使用單例模式來(lái)實(shí)現(xiàn)這種業(yè)務(wù)場(chǎng)景。
類(lèi)圖描述
略
代碼實(shí)現(xiàn)
1、懶漢式,線程不安全
public class SingleObject { private static SingleObject _instance; private
SingleObject() { } public static SingleObject GetInstance() => _instance ??
(_instance = new SingleObject()); public void ShowMessage() {
Console.WriteLine("Hello World"); } }
2、懶漢式,線程安全
public class SingleObject { private static SingleObject _instance; private
static readonly object _locker = new object(); private SingleObject() { }
public static SingleObject GetInstance() { if (_instance == null) { lock
(_locker) { if (_instance == null) { _instance = new SingleObject(); } } }
return _instance; } public void ShowMessage() { Console.WriteLine("Hello
World"); } }
3、靜態(tài)內(nèi)部類(lèi)延遲加載
public class SingleObject { public static SingleObject GetInstance() =>
Nested.Instance; private sealed class Nested { static Nested() { } internal
static readonly SingleObject Instance = new SingleObject(); } public void
ShowMessage() { Console.WriteLine("Hello World"); } }
4、上層調(diào)用
class Program { static void Main(string[] args) {
SingleObject.GetInstance().ShowMessage(); Console.ReadKey(); } }
總結(jié)
對(duì)于單例模式,較為好理解,如果需要保持對(duì)象的唯一性,則可以考慮使用這種模式進(jìn)行解決。
熱門(mén)工具 換一換
