1 單例模式

2022-03-10 21:52:39 字數 1292 閱讀 4660

一、經典模式:

public

class

singleton

public

static

singleton getinstance()

return

instance;

}}

解析如下:

1)首先,該singleton的建構函式必須是私有的,以保證客戶程式不會通過new()操作產生乙個例項,達到實現單例的目的;

2)因為靜態變數的生命週期跟整個應用程式的生命週期是一樣的,所以可以定義乙個私有的靜態全域性變數instance來儲存該類的唯一例項;

3)必須提供乙個全域性函式訪問獲得該例項,並且在該函式提供控制例項數量的功能,即通過if語句判斷instance是否已被例項化,如果沒有則可以同new()建立乙個例項;否則,直接向客戶返回乙個例項。

在這種經典模式下,沒有考慮執行緒併發獲取例項問題,即可能出現兩個執行緒同時獲取instance例項,且此時其為null時,就會出現兩個執行緒分別建立了instance,違反了單例規則。因此,需對上面**修改。

二、多執行緒下的單例模式

1、lazy模式

view code

public

class

singleton

public

static

singleton getinstance()}}

return

instance;}}

2、餓漢模式

這種模式的特點是自己主動例項。

view code

public

sealed

class

singleton

public

static

singleton getinstance()

}

上面使用的readonly關鍵可以跟static一起使用,用於指定該常量是類別級的,它的初始化交由靜態建構函式實現,並可以在執行時編譯。在這種模 式下,無需自己解決執行緒安全性問題,clr會給我們解決。由此可以看到這個類被載入時,會自動例項化這個類,而不用在第一次呼叫 getinstance()後才例項化出唯一的單例物件。

小例子:

public

class counter / /計數器  

public

static

counter getinstance( )   

return

mycounter;  }}

呼叫:counter.getinstance().count()

1 單例模式

乙個類只能有乙個例項。比如印表機這種東西。trick在於 變數,構造方法都必須為private,所以其他類new它的構造方法是不行的,直接呼叫變數也不行。只能呼叫getinstance 方法 其他被public修飾的方法。getinstance 方法記得用public修飾。原理 public cla...

1 單例模式

某個物件只需要乙個例項的情況,比方說gamemanager,resourcemanagerusing system namespace 單例模式 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點 public static singleton getinstance 構造...

單例模式1

1 餓漢式 author version 0.1 單例模式 餓漢式 建立時進行例項化 1 私有化構造方法 2 建立私有例項 static 3 建立公共類方法 static 方法輸出單例 public class singleton5 公共方法 public static singleton5 get...