單件模式(singleton)

2021-07-29 15:48:20 字數 1175 閱讀 5338

單件模式是設計模式裡面最簡單的模式。

它的目的是設計出只有乙個例項的類,並確保全域性訪問。

public

static

class

singleton

public

static singleton getinstance()

return unique;

} }

經典單件模式執行緒是不安全的。

1. 靜態方法

靜態方法可以直接通過類名呼叫,任何的例項也都可以呼叫,因此靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的例項變數和例項方法 (就是不帶static的成員變數和成員成員方法),只能訪問所屬類的靜態成員變數和成員方法。因為例項成員與特定的物件關聯!

2. 靜態變數

按照是否靜態的對類成員變數進行分類可分兩種:一種是被static修飾的變數,叫靜態變數或類變數;另一種是沒有被static修飾的變數,叫例項變數。兩者的區別是:

對於靜態變數在記憶體中只有乙個拷貝(節省記憶體),jvm只為靜態分配一次記憶體,在載入類的過程中完成靜態變數的記憶體分配,可用類名直接訪問(方便),當然也可以通過物件來訪問(但是這是不推薦的)。

對於例項變數,每建立乙個例項,就會為例項變數分配一次記憶體,例項變數可以在記憶體中有多個拷貝,互不影響(靈活)。

public static synchronized getinstance()

優點:方便,缺點:效率低

private static singleton unique=new singleton();

public

class

singleton

public

static singleton getinstance()}}

return unique;

}}

volatile用法

當乙個變數定義為 volatile 之後,將具備兩種特性:

2.禁止指令重排序優化。有volatile修飾的變數,賦值後多執行了乙個「load addl $0x0, (%esp)」操作,這個操作相當於乙個記憶體屏障(指令重排序時不能把後面的指令重排序到記憶體屏障之前的位置),只有乙個cpu訪問記憶體時,並不需要記憶體屏障;(什麼是指令重排序:是指cpu採用了允許將多條指令不按程式規定的順序分開發送給各相應電路單元處理)。

單件模式 Singleton

基於模版的singleton模式templateclass singletemp return m psingle protected singletemp cout call singletemp class mysingle public singletemp templatefriend cl...

Singleton單件設計模式

單例模式也稱為單件模式 單子模式 其應用場景是程式中需要寫個類,而這個類只能產生乙個例項。這個例項在全域性被所有類都能夠呼叫到,這個時候我們所使用的就是單例模式。該例項被所有程式模組共享。有很多地方需要這樣的功能模組,如系統的日誌輸出等。而乙個例項的實現方式有很多種,可以通過全域性變數來實現,但這樣...

設計模式 單件 Singleton

單件模式 singleton 什麼時候使用?當需要獨一無二的物件時,請想起他。舉例 執行緒池 threadpool 快取 cache 對話方塊,處理偏好設定和登錄檔 registry 的物件,驅動程式物件。無需具體例子,先看類圖 包含乙個private的自己的例項。private的建構函式,確保無法...