在專案開發中,我們經常聽到單例設計模式,即將類的構造方法私有化,對外只提供獲取該類例項的介面;根據類例項的建立方式又可分為立即載入(餓漢模式)和延遲載入(懶漢模式),在實際中需要結合專案實際需求選擇合適的載入方式,因此深入理解這兩種載入模式下的特點以及多執行緒環境下的安全問題,成為我們專案開發設計的必備技能之一。
立即載入
延遲載入
1.直接建立例項物件
public class myobject
//提供外部獲取例項物件的介面
public myobject getinstance()
}
2.同步**塊建立例項物件
public class myobject
private myobject()
public myobject getinstance()
}
3.靜態內部類
public class myobject
private myobject()
public myobject getinstance()
}
這三種立即載入模式本質上都是在類的位元組碼載入時,就完成類例項的建立,針對不同的專案實際需求可能需要選擇不同的模式,其實本質上都是採用第一種方式的實現思路。
延遲載入模式,即在首次獲取類的例項物件時建立例項,下次獲取的例項物件返回的仍然是第一次建立例項物件,通常採用兩種方式來實現該模式,為類的靜態成員變數和類的內部列舉。
1.類的靜態成員變數
public class myobject
public static myobject getinstance() else }}
return myobject;
}}
2.類的內部列舉
public class myobject
//類的內部列舉
public enum myobjectenum
//給外界提供獲取列舉屬性的介面
public myobject getmyobject()
}
//給外部提供獲取類例項物件的介面
public myojbect getinstance()
}
兩種延遲載入模式的方法雖然形式有所差異,本質上仍然是一致的,即保證多執行緒環境下多次獲取類的例項物件是唯一的。
單例設計模式在實際中到底採取哪種載入模式,以及各種載入模式對應實現的方法還需要各自開發人員根據實際情況選取,以上簡單解析只供參考。
設計模式 單例模式(執行緒安全)
前言 單例模式是設計模式中比較簡單的一種,但是又因為簡單常見在面試中又是經常出現的乙個設計模式。所以必須要會啊。之前也只是會寫執行緒不安全的單例模式。單例模式 乙個類能返回物件乙個引用 永遠是同乙個 和乙個獲得該例項的方法 必須是靜態方法,通常使用getinstance這個名稱 當我們呼叫這個方法時...
設計模式之單例模式 執行緒安全
可以說單例模式是所有設計模式中最簡單的一種。單例模式就是說系統中對於某類的只能有乙個物件,不可能出來第二個。單例模式也是23中設計模式中在面試時少數幾個會要求寫 的模式之一。主要考察的是多執行緒下面單例模式的執行緒安全性問題。1.多執行緒安全單例模式例項一 不使用同步鎖 1 public class...
設計模式之單例模式 執行緒安全
可以說單例模式是所有設計模式中最簡單的一種。單例模式就是說系統中對於某類的只能有乙個物件,不可能出來第二個。單例模式也是23中設計模式中在面試時少數幾個會要求寫 的模式之一。主要考察的是多執行緒下面單例模式的執行緒安全性問題。1.多執行緒安全單例模式例項一 不使用同步鎖 1 public class...