單例設計模式

2021-10-02 02:48:04 字數 2518 閱讀 3127

public

class

singleton

private

static

final singleton instance =

newsingleton()

;// 立即載入 開闢記憶體空間

public

static singleton getinstance()

}

在呼叫singleton.getinstance()時候的載入順序

首先載入常量(靜態修飾),開闢記憶體空間(呼叫構造方法)初始化常量,返回常量給呼叫方。

缺點: 當singleton類載入的時候就會對instance初始化,開闢記憶體空間,隨類銷毀才能釋放記憶體。在特定條件下消耗記憶體

public

class

singleton

private

static singleton instance = null;

// 延遲載入,沒有立即開闢記憶體空間初始化變數,去掉了final修飾符,表示該變數的值可被修改。

public

static singleton getinstance()

return instance;

}}

在呼叫singleton.getinstance()時候的載入順序

先載入靜態變數instance,但不對其開闢記憶體空間,相比於餓漢式,節省記憶體資源,只有第一次呼叫singleton.getinstance()的時候才會開闢記憶體。

缺點: 在多執行緒中,執行緒不安全,因為沒有final修飾,不表示常量,也就是說該值是會被改變的,不能保證單例

public

class

singleton

private

static singleton instance = null;

// 延遲載入,沒有立即開闢記憶體空間初始化變數,去掉了final修飾符,表示該變數的值可被修改。

public

static

synchronized singleton getinstance()

return instance;

}}

在呼叫singleton.getinstance()時候的載入順序

先載入靜態變數instance,不開闢記憶體空間,使用synchronized修飾,實現同步,在多執行緒中保證單例

缺點: 使用synchronized,雖然實現了同步,多執行緒下保證了單例,但是降低了效率

public

class

singleton

private

static singleton instance = null;

// 延遲載入,沒有立即開闢記憶體空間初始化變數,去掉了final修飾符,表示該變數的值可被修改。

public

static singleton getinstance()

}}return instance;

}}

在呼叫singleton.getinstance()時候的載入順序

dcl存在失效問題,乙個執行緒正在執行new singleton();開闢記憶體空間,沒開闢完成時,另乙個執行緒進來發現instance例項不是空,直接返回了。於是有了下面解決方案

public

class

singleton

private

volatile

static singleton instance = null;

// 延遲載入,沒有立即開闢記憶體空間初始化變數,去掉了final修飾符,表示該變數的值可被修改。volatile 輕量級的同步

public

static singleton getinstance()

}}return instance;

}}

public

class

singleton

// 私有化構造方法

private

static

class

singletonholder

public

static singleton getinstance()

}

在呼叫singleton.getinstance()時候的載入順序

載入靜態內部類,載入靜態內部類中常量,呼叫外部構造方法開闢記憶體空間,返回給呼叫方。

靜態內部類實現懶載入,只有在呼叫靜態內部類的時候,靜態內部類才會載入,隨即靜態內部類中的常量載入,並呼叫外部構造方法,開闢記憶體空間初始化常量。達到了節約記憶體資源的目的。

同時使用final修飾 保證了常量不會被修改

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...