單例設計模式

2021-08-18 23:42:37 字數 1344 閱讀 2133

餓漢式

餓漢式實現方式有乙個缺點,就是當我們去呼叫內部的方法時,方法區會載入類資訊(包括靜態變數),但是靜態變數是經過final static修飾的,所以new了之後不會被改變,其他的執行緒訪問的時候是安全的。

class taskmanager

private final static taskmanager tm = new taskmanager();

public static taskmanager getinstance()

public static int m()

}

懶漢式

懶漢式彌補了餓漢式的缺點,但是又出現了乙個新的問題,就是執行緒不安全,因為可能會出現一種情況,多個執行緒同時進入getinstance()方法的if語句中,可能會出現new 出不同的物件返回。

class taskmanager

private static taskmanager tm = null;

public static taskmanager getinstance()

// 如果不進行判斷,表明tm已經有了位址值,如果進入判斷就是返回剛建立的位址值

return tm;

}public static int m()

}

優化版懶漢式

在懶漢式的基礎上,對getinstance()方法進行加鎖,這樣執行緒就是安全的了,但是效率卻大大降低

class taskmanager

private static taskmanager tm = null;

public static synchronized taskmanager getinstance()

// 如果不進行判斷,表明tm已經有了位址值,如果進入判斷就是返回剛建立的位址值

return tm;

}public static int m()

}

最終版

取消對方法加鎖,這樣使得各個執行緒可以取得物件。

class taskmanager

private static taskmanager tm = null;

public static taskmanager getinstance() }}

// 如果不進行判斷,表明tm已經有了位址值,如果進入判斷就是返回剛建立的位址值

return tm;

}public static int m()

}

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

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

設計模式 單例設計模式

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

設計模式 單例設計模式

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