設計模式(一) 單例模式

2022-02-22 05:08:00 字數 1652 閱讀 2025

單例模式是設計模式中最簡單的一種,主要目的就是確保程式執行期間只有乙個物件被建立。

特點:建構函式私【私有】、類內部有【私有】自身型別的屬性、提供獲取例項的靜【靜態】方法;

好處是大大減少了物件建立時的效能損耗和記憶體占用;

單例模式的建立方式有 懶漢模式、餓漢模式、雙重鎖模式、靜態內部類單例模式、列舉單例模式

1、懶漢模式:

///

///懶漢單例

/// public

class

singletonlh

//////

獲取物件的靜態方法

/// ///

public

static

singletonlh getsingletonlh()

}

缺點:執行緒不安全、延遲初始化,嚴格意義上不算是單例模式,基本上不會有人用

2、餓漢模式

///

///餓漢單例

/// public

class

singletoneh

//////

獲取物件的靜態方法

/// ///

public

static

singletoneh getsingletonlh()

}

好處:執行緒安全,只初始化一次、記憶體中僅留存乙份,不會被拷貝

壞處:程式開始的時候就初始化,如果一直不用會存在記憶體浪費,占用資源

3、雙重鎖模式

///

///雙重鎖單例模式

/// public

class

singletonscs

//////

獲取物件的靜態方法

/// ///

public

static

singletonscs getsingletonlh()

}return

singletonscs;

}}

好處:執行緒安全,延遲初始化,使用volatile宣告的變數就相當於告訴編譯器,我不要把這個變數寫cache,因為這個變數是可能發生改變的。

4、靜態內部類單例模式

///

///靜態內部類單例模式

/// public

class

singletonjtnbl

//////

獲取物件的靜態方法

/// ///

public

static

singletonjtnbl getsingleton()

//////

乙個靜態內部類提供乙個靜態的例項

/// private

static

class

innerclass

}

5、列舉單例模式

c# 不支援這種寫法,在c#中列舉是乙個值型別,內部不存在方法一說

ps:針對大物件可使用lazy<>進行延遲載入。

2023年10月22日23:20:03

往後三個星期,每天覆習乙個設計模式,go

設計模式 一 單例模式

思路 1 如果其他程式能夠隨意用new建立該類物件,那麼就無法控制個數。因此,不讓其他程式用new建立該類的物件。2 既然不讓其他程式new該類物件,那麼該類在自己內部就要建立乙個物件,否則該類就永遠無法建立物件了。3 該類將建立的物件對外 整個系統 提供,讓其他程式獲取並使用。步驟 1 將該類中的...

設計模式(一) 單例模式

這種模式只涉及到乙個單一的類,該類負責建立自己的物件,並確保只建立乙個物件。單例只有乙個例項 單例類必須建立自己唯一的例項 單例類必須給其他物件提供這唯一的例項 由於當今的程式設計模型都是基於多執行緒方式,因此此處只介紹執行緒安全的幾種實現。第一次被呼叫時才建立物件,屬於懶載入 lazy init ...

設計模式(一) 單例模式

單例模式 保證執行記憶體中只有乙個實體的實現模式就是單例模式,最常見的有餓漢模式 懶漢模式兩種。餓漢模式 package com.madg.design.singleton public class hungry public hungry getinstance 懶漢模式 package com....