單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只有乙個物件例項。(來自百科,,基本概念不是我要說的)
單例模式的實現形式有多種,但從new物件的時機可以分為懶漢式、餓漢式。就是說乙個是提前把物件建立出來,乙個是等要用的時候再建立物件。接下來的幾種實現會標出來屬於哪一類。
public class singleton
public static singleton getinstance()
}
這個沒啥好說的,私有化建構函式,定義final static的物件,在類載入的時候物件就已經建立完成。
public class singleton
public static singleton getinstance() }}
return singleton;
}}
這個種寫法有幾個注意的地方。
1,getinstance 的時候先判斷==null然後再進入同步**塊,當發生了併發倆個執行緒都進入了if語句後,為了防止倆個執行緒先後都進入同步塊建立倆個物件,所以需要再次判null,避免第二個執行緒建立例項。
2,關於volatile的說明我本來想自己寫,但是看到這位大佬寫的又好又詳細所以直接放他的鏈結
從清單4開始下面又為什麼要用volatile的詳細解釋。
public class singleton
private static class singletoninstance
public static singleton getinstance()
}
這種方法主要是利用了靜態內部類,在第一次呼叫它的時候才會進行載入所以它內部的new singleton也會在這時候才進行建立。 java設計模式之單例模式
單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...
java設計模式 之 單例模式
單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...
Java設計模式之單例模式
說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...