Java設計模式--單例模式
一、概念
單例模式中物件建立只有一個單獨的例項,只有唯一的全域性訪問點。也可以說單例就是保證一個類只有一個例項。
二、實現方法
單例模式的實現方法有很多,在這裡介紹幾種常用或者說常見的:
1、懶漢式
01 02 03 04 05 06 07 08 09 10 11 |
class LazySingleton{ private static LazySingleton singleton; private LazySingleton(){ } public static LazySingleton getInstance(){ if(singleton==null){ singleton=new LazySingleton(); } return singleton; } } |
從程式碼中也可以看出,懶漢就是每次使用時才進行例項化,這也算是其一個優點, 而缺點也顯而易見,即其時執行緒不安全的,在多執行緒下不能正常工作。
2、餓漢式
1 2 3 4 5 6 7 |
class HungrySingleton{ private static HungrySingleton singleton=new HungrySingleton(); private HungrySingleton(){} public static HungrySingleton getInstance(){ return singleton; } } |
餓漢式單例模式相比於懶漢式單例,在靜態初始化時完成單例物件的例項化。缺點在於不管是否使用這個單例,它都會一直在記憶體中,優點是其是執行緒安全的單例模式。
3、雙重校驗鎖單例模式
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |
class LockSingleton{ private volatile static LockSingleton singleton; private LockSingleton(){}
public static LockSingleton getInstance(){ if(singleton==null){ synchronized(LockSingleton.class){ if(singleton==null){ singleton=new LockSingleton(); } } } return singleton; } } |
雙重校驗鎖單例模式:每次外部請求單例物件時,先檢查是否已例項化,如果尚未例項化才進行例項化。理論上只有第一次才會徹底執行同步區塊內的程式碼,既實現了延遲載入,又是執行緒安全的單例模式
4、靜態內部類單例
1 2 3 4 5 6 7 8 9 |
class InternalSingleton{ private static class SingletonHolder{ private final static InternalSingleton INSTANCE=new InternalSingleton(); } private InternalSingleton(){} public static InternalSingleton getInstance(){ return SingletonHolder.INSTANCE; } } |
餓漢式單例雖然執行緒安全,但類裝載時建立物件會浪費記憶體而靜態內部類單例模式正好克服了這一點。因為其採用類級內部類(只有在第一次被使用的時候才會被裝載),類裝載的時候不初始化物件。使用JVM靜態初始化器進行初始化變數時,JVM會隱含為我們執行synchronized進行加互斥鎖的同步控制,從而同時實現延遲載入和執行緒安全
5、列舉實現單例
1 2 3 4 5 |
enum EnumSingleton{ INSTANCE; public void doSomeThing(){ } } |
優點是執行緒安全,呼叫效率高,天然防止反射和反序列化漏洞 。缺點就是不能實現延遲載入
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3349/viewspace-2812490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java設計模式–單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式-單例模式Java設計模式單例
- Java設計模式之單例模式Java設計模式單例
- Java設計模式4:單例模式Java設計模式單例
- Java常用設計模式-單例模式Java設計模式單例
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- java單例設計模式Java單例設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- java設計模式其一 單例模式Java設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- 我的Java設計模式-單例模式Java設計模式單例
- 《JAVA與設計模式》之單例模式Java設計模式單例
- 設計模式-Java實現單例模式設計模式Java單例
- 折騰Java設計模式之單例模式Java設計模式單例
- Java設計模式——單例模式(Singleton pattern)Java設計模式單例
- Java 中設計模式 (單例模式) 介紹Java設計模式單例
- Java設計模式之單例模式(Singleton)Java設計模式單例
- [設計模式]單例設計模式設計模式單例
- 設計模式-單例模式設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式(單例模式)設計模式單例
- 設計模式——單例模式設計模式單例
- 設計模式--單例模式設計模式單例
- 設計模式 單例模式設計模式單例
- [java設計模式]破解單例設計模式,禁止偷生、超生!Java設計模式單例
- 設計模式-單例模式、多例模式設計模式單例
- 設計模式之單例設計模式設計模式單例
- java23種設計模式—— 二、單例模式Java設計模式單例
- 直播軟體搭建,Java設計模式單例模式Java設計模式單例
- 設計模式 - java程式碼實現單例模式設計模式Java單例
- Java設計模式之單例模式(Singleton Pattern)Java設計模式單例
- JAVA設計模式之 單例模式【Singleton Pattern】Java設計模式單例
- 設計模式一(單例模式)設計模式單例