設計模式05 單例模式

2021-09-29 09:22:59 字數 1389 閱讀 6475

在程式執行期間確保某個類只有乙個物件

tip:非常餓,所以要快速建立

public

class

hungrysingle

public

static hungrysingle getinstance()

}

優點:執行緒安全,容易實現,沒有加鎖,執行效率高

缺點:浪費記憶體,不能從外部傳入引數

tip:這裡的懶指的是懶載入。

餓漢式由於不能傳參,所以需要懶漢式單例,由外部傳入引數進行初始化。

public

class

lazysingle

public

static lazysingle getinstance

(int type)

return instance;

}}

優點:可以傳參,容易實現,沒有加鎖,執行效率高,懶載入(使用時才建立)

缺點:執行緒不安全

餓漢式雖然執行效率高,但是無法傳參,不使用也占用記憶體。

懶漢式可以解決傳參的問題,但是執行緒不安全,如果加鎖了會影響效率。

雙重校驗鎖可以進行雙重校驗,如果已經例項化就直接返回,提高效率,並且執行緒安全。

public

class

doublechecksingle

public

static doublechecksingle getinstance

(int type)}}

return instance;

}}

volatile關鍵字保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是立即可見的。(實現可見性)

禁止進行指令重排序。(實現有序性)

優點:可以傳參,執行緒安全,效率高

缺點:實現較複雜

與懶漢式不同,餓漢式在類載入時就已經建立乙個例項。靜態內部類的方式會在呼叫getinstance()方法時才建立例項,既達到懶載入的目的,又能保證執行緒安全。

public

class

innersingle

public

static innersingle getinstance()

static

class

holder

}

優點:懶載入,執行緒安全

缺點:不能傳參,實現較複雜

public

enum enumsingle

}

優點:實現簡單,執行緒安全

缺點:無法傳參

設計模式05 單例模式

單例模式是一種物件建立型模式,使用單例模式,可以保證為乙個類只生成唯一的例項物件。也就是說,在整個程式空間中,該類只存在乙個例項物件。其實,gof對單例模式的定義是 保證乙個類 只有乙個例項存在,同時提供能對該例項加以訪問的全域性訪問方法。在應用系統開發中,我們常常有以下需求 在多個執行緒之間,比如...

設計模式筆記 05 單例模式

package com.maom.design.d 05 singleton title d 05 singleton description 05 單例模式 author maohb version 1.0 public class d 05 singleton 餓漢式 class person ...

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...