Java設計模式 | 單例模式
什麼是單例設計模式?
對於單例設計模式來說,其實和生活密不可分。假如說你的生活中有些東西只能有一個,比如親人。任何時間你想找父親開視訊聊天,找到的都是唯一的一個父親。不可能說兩次通話找到的不同的父親。例子可能不是很恰當。就是說這樣一個需求,每次獲取一個物件時,所拿到的物件都是同一個物件。
對單例來說其主要規則有如下三點:
1. 其構造器必須是private
的,不能通過new
來建立物件。
2. 只能通過唯一一個靜態函式來獲取物件
3. 因為只能通過靜態函式來獲取物件,所以其物件也必須是靜態且私有的。
對於單例設計模式,其實現方式有兩種:
- 餓漢式單例,程式啟動時就建立一個唯一的例項物件,即單例類定義的時候就進行例項化
- 懶漢式單例,當第一次使用時才建立一個唯一的例項物件,從而實現延遲載入的效果
餓漢式單例
public class Singleton
{
//1.私有化構造器
private Singleton()
{
}
//2.內部建立私有靜態物件
private static Singleton instance=new Singleton();
//3.提供公共的靜態方法
public static Singleton getInstance()
{
return instance;
}
}
懶漢式單例
public class Singleton
{
//1.私有化構造器
private Singleton()
{
}
//2.內部宣告私有靜態物件為null
private static Singleton instance=null;
//3.提供公共的靜態方法,判斷instance是否存在,不存在再建立
public static Singleton getInstance()
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
餓漢和懶漢的區別
- 餓漢,一開始就建立物件,可能還沒用到,載入的時間過長,其生命週期太長。
其天然執行緒安全
。 - 懶漢,延遲載入,等到用的時候才建立,節省記憶體。但是需要自己實現其執行緒安全。
執行緒安全的懶漢式單例
首先分析目前出現的執行緒不安全狀況,後續學完Java的多執行緒語法再來優化。
public static Singleton getInstance()
{
if(instance==null) //當第一個執行緒建立單例式,訪問到這一步,條件滿足,準備去new
{ //另外一個執行緒也訪問到這一步,第一個執行緒還沒訪問new,條件也滿足,這個執行緒也去new。
instance=new Singleton(); //結果兩個執行緒各自new了一次。打破了單例
}
return instance;
}
單例的適用場景
拿我們的windows電腦來說,我們平常適用微信的時候,即使雙擊兩次,訪問的還是同一個微信程式。
還有比如工作管理員等等。
相關文章
- Java設計模式-單例模式Java設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java常用設計模式-單例模式Java設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- Java設計模式之單例模式Java設計模式單例
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- java單例設計模式Java單例設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- java設計模式其一 單例模式Java設計模式單例
- 折騰Java設計模式之單例模式Java設計模式單例
- 設計模式 單例模式設計模式單例
- 設計模式——單例模式設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式-單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式(單例模式)設計模式單例
- [java設計模式]破解單例設計模式,禁止偷生、超生!Java設計模式單例
- 設計模式-單例模式、多例模式設計模式單例
- 直播軟體搭建,Java設計模式單例模式Java設計模式單例
- java23種設計模式—— 二、單例模式Java設計模式單例
- 設計模式之單例設計模式設計模式單例
- 設計模式之單例模式設計模式單例
- 常用設計模式-單例模式設計模式單例
- 設計模式之---單例模式設計模式單例
- 設計模式(二)——單例模式設計模式單例
- 001設計模式:單例模式設計模式單例
- # Python設計模式 單例模式Python設計模式單例
- 設計模式一(單例模式)設計模式單例
- 設計模式之☞單例模式設計模式單例
- Python設計模式——單例模式Python設計模式單例
- 設計模式—singleton(單例模式)設計模式單例
- python設計模式-單例模式Python設計模式單例
- js設計模式--單例模式JS設計模式單例
- 設計模式(一)_單例模式設計模式單例