設計模式之單例模式

2022-02-03 12:56:58 字數 2359 閱讀 7927

學習程式設計學習到一定程度不可避免的需要去學習更深層次的東西,雖然在之前的學習中接觸到一些設計模式,但是自己沒有能夠好好總結,以至於沒能體會到更高深的程式設計樂趣。

單例模式要點為以下幾點

1.單例類不可繼承

2.私有化建構函式

3.公開靜態化例項獲取方法 

一,首先是最熟悉的簡單的單例模式

package v1;

//最簡單的單例設計模式

public final class

singleton

//公開 靜態化 例項獲取方法

public

static

singleton getinstance()

return

instance;

}}

執行緒安全:非執行緒安全

型別:簡單單例模式

是否lazy初始化:是

二.其次是簡單的執行緒安全單例模式

//

類不可繼承

public final class

singleton

//公開靜態方法 懶漢模式 同步方法

public

static

synchronized singleton getinstance()

return

instance;

}}

相對於第一種模式,這個單例模式採取synchronized關鍵字,獲取方法為執行緒安全方法,

執行緒安全:執行緒安全

型別:懶漢模式的單例

是否lazy初始化:是

對於型別的其他實現

package v2;

//考慮執行緒安全的單例模式

public final class

singleton

//靜態化例項獲取

public

static

singleton getinstance()

}return

instance;

}}

想較於第上面那種實現,唯一的改變為該鎖方法為鎖區域,但是實際上仍然是一種懶漢模式

執行緒安全:執行緒安全

型別:懶漢模式的單例

是否lazy初始化:是

三.雙重校驗模式

package

v3;//

final 不可繼承

public

final

class

singleton

//公有化 靜態方法 例項獲得方法

public

static

singleton getinstance()}}

return

instance;

}}

相較於第二種模式,第三種模式更側重於校驗單例是否例項化

執行緒安全:執行緒安全

型別:雙重鎖的單例

是否lazy初始化:是

四.靜態初始化的單例模式

package

v4;//

類不可繼承 餓漢模式 依賴於類載入器載入

//確定 對於記憶體的消耗 容易產生較多需要銷毀的物件 但是依然是執行緒安全

//靜態初始化

public

final

class

singleton

//公開靜態例項的獲取方法

public

static

singleton getinstance()

}

相較於其他的單例模式,這種單例模式更依賴於classloader,在類初始化時呼叫,生成例項物件,但是比較容易產生較多的可**物件,對於記憶體的消耗可能較多

執行緒安全:執行緒安全

型別:靜態初始化的單例

是否lazy初始化:否

五:延遲載入的單例模式

package

v6;//

類不可繼承 繼承有可能破壞物件的封裝

//單例模式 延遲載入

//即是執行緒安全 有是能夠解決多數單例問題的最佳方案

public

final

class

singleton

public

static

singleton getinstance()

private

static

class

nested

}

相較於其他的單例實現方法,這種單例的實現方法更為依賴內部類,延遲載入,是大多數大規模框架中常見的單例模式,也是最受喜愛的單例模式

執行緒安全:執行緒安全

型別:延遲載入的單例

是否lazy初始化:是

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...