天天看點

Java常用設計模式——單例模式

Java中有很多設計模式,在網上也有很多設計模式的教程和資料,講解的也比較詳細,對我在學習中産生的問題提供了很大的幫助,但是經常有一些問題查了很多部落格也無法再找到答案,是以我希望能填補一些這方面的空白,将我在日常學習過程的了解和想法寫下來,并能和關心此類問題同學和朋友一起讨論一下。

設計模式是前輩們在多年開發工作中經驗的總結,可以提高代碼的可重用性、可靠性和規範性,讓代碼更容易了解,而單例模式是在Java中最重要、最簡單、最常用的設計模式之一,這篇文章我們将重點讨論的是單例模式。 

*******************下面是重點内容*****************

單例模式是指一個Java類在多次被調用時隻産生一個執行個體化對象,避免了每次使用都重新執行個體化的過程,提高了系統性能,也減少了記憶體占用。

在實際使用過程中,單例模式分為懶漢模式和餓漢模式,具體的實作方法和為什麼這樣取名,請看下面↓↓↓↓↓↓↓

一、單例模式分為餓漢模式和懶漢模式:

  • 餓漢模式在類加載時就初始化一個執行個體化對象,每次都傳回這個執行個體化好的對象。(加載類時立刻執行個體化了一個對象,故稱為餓漢模式)
  • 懶漢模式在類初始化時不執行個體化對象,在擷取該對象時判斷是否為空,如果為空就執行個體化一個傳回,不為空就直接傳回。(不主動執行個體化對象,擷取的時候才執行個體化,故稱為 懶漢模式)

二、代碼實作

基本原則

    • 隻能有一個執行個體化對象,使用靜态變量儲存
    • 不能調用構造方法進行執行個體化,需要私有化構造器
    • 使用靜态方法傳回執行個體化對象

餓漢模式

/*
 * 單例模式Singleton
 * 應用場合:有些對象隻需要一個就足夠了,如古代皇帝、老婆
 * 作用:保證整個應用程式中某個執行個體有且隻有一個
 * 類型:餓漢模式、懶漢模式
 */
public class Singleton {
	//1.将構造方法私有化,不允許外部直接建立對象
	private Singleton(){		
	}
	
	//2.建立類的唯一執行個體,使用private static修飾
	private static Singleton instance=new Singleton();
	
	//3.提供一個用于擷取執行個體的方法,使用public static修飾
	public static Singleton getInstance(){
		return instance;
	}
}
           

懶漢模式

/*
 * 懶漢模式
 */
public class Singleton2 {
	//1.将構造方式私有化,不允許外邊直接建立對象
	private Singleton2(){
	}
	
	//2.聲明類的唯一執行個體,使用private static修飾
	private static Singleton2 instance;
	
	//3.提供一個用于擷取執行個體的方法,使用public static修飾
	public static Singleton2 getInstance(){
		if(instance==null){
			instance=new Singleton2();
		}
		return instance;
	}
}
           

三、差別

  • 餓漢模式的特點是加載類時比較慢,但運作時擷取對象的速度比較快,線程安全
  • 懶漢模式的特點是加載類時比較快,但運作時擷取對象的速度比較慢,線程不安全