設計模式之單例模式詳解

2021-09-25 20:25:21 字數 3003 閱讀 1284

特點

執行緒安全:天生執行緒安全

適用於:單例占用記憶體比較小,在初始化時就會被用到的情況

特點: 1. 單例類載入的時候就會建立單例物件(類載入機制); 2. 天生執行緒安全

缺點:由於其特殊的類載入機制,如果沒有用到這個單例類的話,就會浪費掉記憶體優點:類載入機制,保證天生執行緒安全,避免了多執行緒同步問題

/**

* @author: richard

* @date: 2019/7/18

* @describe: 單例類_餓漢式,在類載入時就建立了例項;

*/public class mysingletontest_1

//提供乙個靜態方法,返回單例

public static mysingletontest_1 getinstance()

}

適用於:單例使用的次數少,並且建立的單例占用的資源較多的情況

特點:1. 就是延遲載入,在需要的時候才會去載入單例;2. 實現單例通過判空操作來實現的

缺點:多個執行緒可能會併發的呼叫類中提供單例的方法,導致存在多個例項,出現多執行緒同步問題優點:單例是在要需要的時侯才會去建立,節約資源

/**

* @author: richard

* @date: 2019/7/19

* @describe: 單例模式_懶漢式,這是改良的執行緒安全的模式,一般的就去掉鎖

*/public class mysingletontest_2

//提供乙個靜態方法,獲取單例例項,在方法上加上鎖,保證執行緒安全

//synchronized修飾的同步方法比一般方法要慢很多,如果多次呼叫getinstance(),累積的效能損耗就比較大了

public static synchronized mysingletontest_2 getinstance()

return instance_2;

}}

特點:1. 實現了延遲載入;2. 進行了兩次判控操作,並且鎖住了類,解決了執行緒併發問題;3. 還有改良版的volatile關鍵字的使用

缺點:(了解就行,涉及到的東西太過深入了)

優點:解決了執行緒併發問題,同時還解決了執行效率問題

不過還好在jdk1.5及之後版本增加了volatile關鍵字,解決了雙重校驗鎖會失效的問題

volatile變數可以保證下乙個讀取操作會在前乙個寫操作之後發生

/**

* @author: richard

* @date: 2019/7/19

* @describe: 單例模式_雙重效驗鎖

*/public class mysingletontest_3

//提供乙個靜態方法,獲取例項

public static mysingletontest_3 getinstance() }}

return instance_3;

}}

特點:1. 使用類載入機制來保證只建立乙個例項,不存在多執行緒併發的問題缺點:第一次載入時反應不夠快

優點:因為單例例項在內部類中,因此只要不使用內部類可以同時保證延遲載入執行緒安全

/**

* @author: richard

* @date: 2019/7/19

* @describe: 單例模式_靜態內部類

*/public class mysingletontest_4

//靜態內部類

private static class mysinleton

//靜態方法,訪問內部類屬性,獲取單例例項

public static mysingletontest_4 getinstance()

}

適用於:單例占用記憶體比較小,在初始化時就會被用到的情況

特點:通過列舉例項只能被例項化一次的特性,實現了單例例項的唯一性

缺點:我認為,**太複雜啦~

優點: 在我們訪問列舉例項時會執行構造方法,同時每個列舉例項都是預設static final型別的,也就表明只能被例項化一次。在呼叫構造方法時,我們的單例被例項化。也就是說,因為enum中的例項被保證只會被例項化一次,所以我們的instance也被保證例項化一次。

/**

* @author: richard

* @date: 2019/7/19

* @describe: 單例模式_列舉

*///單例類

public class mysingletontest_5 ;

//提供乙個靜態方法,獲取單例例項

public static mysingletontest_5 getinstance()

private static enum singlrton

//提供乙個靜態方法,返回例項

public mysingletontest_5 getmysingletontest_5()

}}

Java設計模式 設計模式之單例詳解

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證應用中乙個單例類只有且只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並提供全域性訪問點。實現單例三要素 教科書中的示例是很簡單的,要想實現乙個單例類,只需要三點 1 定義私有的靜態成員...

Java設計模式詳解之單例模式

解決的問題 保證乙個類在記憶體中的物件唯一性。eg 多程式讀取乙個配置檔案時,建議配置檔案封裝成物件。會方便操作其中資料,又要保證多個程式讀到的是同乙個配置檔案物件,就需要該配置檔案物件在記憶體中是唯一的。不讓其他程式建立該類物件。在本類中建立乙個本類物件。對外提供方法,讓其他程式獲取這個物件。pu...

設計模式 單例模式詳解

1.懶漢式,執行緒不安全 public class singletonpattern 懶漢式,執行緒不安全 private static singletonpattern instance public static singletonpattern getinstance return insta...