乙個類有且僅有乙個全域性例項,並且提供乙個訪它的全域性訪問點。單例模式讓自身儲存自己的唯一例項,使得這個類保證沒有其他例項可以被建立,從而提供乙個訪問該例項的方法。
singleton
定義乙個instance操作,允許客戶訪問他的唯一例項,instance是乙個類操作,它可能負責建立他自己的唯一例項。
對唯一例項的受控訪問:singleton類封裝他的唯一例項,所以它可以嚴格的控制客戶怎麼樣訪問他。
縮小名字空間:singleton 模式是對全域性變數的一種改進,避免了儲存唯一例項的全域性變數汙染名字空間。
允許對操作和表示的精化:singleton可以有子類,並且用這個擴充套件類的例項來配置乙個應用是很容易的
允許可變數目的例項
比類操作更靈活
懶漢模式
public
class
singletion
public
static singletion getinstance()
return instance;
}}
懶漢模式中單例被延遲載入,只有真正在使用的時候才會例項化乙個物件並交給自己引用。
優:、
延遲載入,只有真正使用的時候才會例項化
缺:
多執行緒下不安全,可能會產生多個例項,在多執行緒下不能使用這種方式
餓漢模式
public
class
singletion1
public
static singletion1 getinstance()
}
餓漢模式在類被載入時候,就會進行例項化物件,並交給自己的引用,而在整個生命週期中一直存在。
優:
類載入時完成初始化例項,避免執行緒同步問題
缺:
由於例項化一次後一直存在,如果之後沒有使用這個例項,會造成記憶體的浪費
雙重鎖
public
class
singletion2
public
static singletion2 getinstance()
}}return instance;
}}
雙重鎖中進行兩次的instance == null的判斷,這樣例項化**只執行一次,再次訪問時候,直接return
優:
執行緒安全、延遲載入、效率高(會消耗一點效能,但更加穩定)
內部類
public
class
singletion3
public
static singletion3 getinstance()
private
static
class
inner
}
只有在第一次呼叫getinstance方法時候,虛擬機器才載入inner並且初始化instance;只有乙個執行緒能夠獲得初始化,保證物件的唯一性。在較多的地方推薦使用。
❤️往期redis內容:可在部落格中直接檢視❤️
設計模式:factory method(工廠模式)–建立型模式
設計模式:factory method(工廠模式)–建立型模式
設計模式:builder(生成器)–建立型模式
redis高階(事務、鎖、刪除策略、逐出演算法)
redis高階:主從複製–小白的高階教程(理論:一文搞懂主從複製)
www.wslhome.top❤️
❤️每天進步一點點 ❤️
? 加油?
小白設計模式入門(1) 單例模式
什麼是單例模式?單例可以理解為乙個類只有乙個例項,因此單例模式就是為了保證這個類只會有乙個例項而總結的一種方法。它在什麼情況下使用的?從單例模式的定義中我們可以看出 單例模式的使用自然是當我們的系統中某個物件只需要乙個例項的情況,例如 作業系統中只能有乙個任務管理器,操作檔案時,同一時間內只允許乙個...
小桐學設計模式 單例模式
單例模式分為兩種,懶漢式和餓漢式。首先看懶漢式 public class a public static a getinstance return a 再來看餓漢式。public class a public static a getinstance 懶漢式在執行getinstance方法時,判斷條...
單例設計模式小白逐步分析
1 package com.test.singleinstance class singleinstance public class singleinstancetest else 結果為 不是同乙個物件2 package com.test.singleinstance class singlei...