單例模式是設計模式中最簡單的一種,主要目的就是確保程式執行期間只有乙個物件被建立。
特點:建構函式私【私有】、類內部有【私有】自身型別的屬性、提供獲取例項的靜【靜態】方法;
好處是大大減少了物件建立時的效能損耗和記憶體占用;
單例模式的建立方式有 懶漢模式、餓漢模式、雙重鎖模式、靜態內部類單例模式、列舉單例模式
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....