四 設計模式之單例模式(重要)(建立型)

2021-09-24 05:26:53 字數 1377 閱讀 8511

單例模式概述

單例模式是一種物件建立型模式,使用單例模式,可以保證為乙個類只生成唯一的乙個例項物件。也就是說,在整個程式空間中,該類只存在乙個例項物件。

其實,gof對單例模式的定義是:保證乙個類,只有乙個例項存在,同時提供能對該例項加以訪問的全域性訪問方法。

為什麼要用單例模式

這是因為在應用系統開發時,我們常常有以下需求:

在多個執行緒之間,比如servlet環境,共享同乙個資源或者操作同乙個物件。

在整個程式空間使用全域性變數,共享資源。

在大規模系統中,為了效能的考慮,需要節省物件的建立時間等等。

因為單例模式可以保證為乙個類只生成唯一的例項物件,所以這些情況,單例模式就派上用場了。

單例模式分類

1、餓漢式(在類載入時就完成了初始化,所以類載入比較慢,但獲取物件的速度快,同時無法做到延時載入)

public class person

//提供乙個全域性的靜態方法

public static person getperson()

}2、懶漢式(在類載入時不初始化,可以延時載入)

懶漢式可以分為兩種,一種執行緒安全,一種執行緒不安全

2.1懶漢式(執行緒不安全,但效率高)

public class person

//提供乙個全域性的靜態方法

public static person getperson()

return person;}}

2.2懶漢式(執行緒安全,但效率低)

public class person

//提供乙個全域性的靜態方法

public static synchronized person getperson()

return person;}}

3、靜態內部類(可以延時載入)

這種方法是餓漢式的一種公升級,這種方式同樣利用了classloder的機制來保證初始化instance時只有乙個執行緒,同時實現了延時載入。

public class person

//建構函式私有化

private person(){}

//提供乙個全域性的靜態方法  

public static final person getperson()

}4、雙重檢查(對懶漢式的公升級,效率更高)

public class person

//提供乙個全域性的靜態方法

public static person getperson()}}

return person;}}

這樣寫,只把新建例項的**放到同步鎖中,為了保證執行緒安全再在同步鎖中加乙個判斷,雖然看起來更繁瑣,但是同步中的內容只會執行一次,執行過後,以後經過外層的if判斷後,都不會在執行了,所以不會再有阻塞。程式執行的效率也會更加的高。

設計模式之單例模式(建立型)

單例模式的核心,就是全域性只有乙個例項。下面就每一種建立方式分析其優缺點。1.餓漢式 餓漢式 public class personhungry public static personhungry getinstance 2.靜態 塊public class person private pers...

設計模式 建立型 單例模式

單例模式在整個軟體開發中還是比較常用的,頻繁使用且過程穩定的方法 全域性變數都可以使用該模式,也可以叫做公共類。單例模式需要遵循要麼出現一次,要麼不出現的規則。單例模式不提供外部例項化功能,在內部自已例項化以保證其唯一例項。具體如下 class common public static common...

設計模式 建立型 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式劃分 class singleton 獲取本類例項的唯一全域性訪問點 public static singleton getinstance return instance 物件屬於引用資料型別,和基本資料...