1. 程式人生 > >單例模式,餓漢模式和懶漢模式

單例模式,餓漢模式和懶漢模式

什麼是單例?單例就是系統執行過程中有且僅有一個例項存在,

即:一個類只有一個例項--最基本的要求(只提供私有構造器),它必須自己建立這個例項(定義靜態的該類的私有物件),它必須自行向整個系統提供這個例項(提供一個靜態的公有方法,返回建立或者獲取本身的靜態私有物件);

單例模式分為餓漢模式和懶漢模式,

餓漢模式:類載入時不建立例項,採用延遲載入的方式,在第一次被呼叫時才進行例項化

特點:執行緒不安全,延遲載入

通過同步(synchronized)可以解決執行緒不安全問題

/**
	 * 懶漢模式
	 * 在第一次呼叫的時候才進行例項化
	 */
	private static Singleton single;
	
	public static Singleton Singleton(){
		if(single==null){
			single=new Singleton();
		}
		return single;
	}
}

由於大部分時候不用同步,這個時候就出現看餓漢模式

餓漢模式:在類載入的時候就完成初始化,

特點:執行緒安全,不具備延遲載入

/**
	 * 餓漢模式
	 * 類初始化的時候已經自行例項化
	 */
	 private static Singleton1 single1=new Singleton1();
	 public static Singleton1 getSingleton1(){
		 return single1;
	 }

靜態內部類

當類載入時完成載入並不例項化,只有呼叫的時候才會例項化

	private static Singleton singleton;
	private Singleton(){
		//放置只執行一次的業務程式碼操作
	}
	public static class SingletonHelper{
		private static final Singleton single=new Singleton();
	}
	public static Singleton getSingleton(){
		singleton=SingletonHelper.single;
		return singleton;
	}

相關推薦

Java中設計模式懶漢式

set tin desc 驅動 ack 情況下 zed 獲取 java反射機制   Java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這裏主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。  單例模式有以下特點:  1、單例類只能有一個實例。  2、單例類必須

模式懶漢式有什麼區別?各適合用在哪裡?為什麼說推薦用模式

 餓漢式:        public class Singleton{            private static Singleton singleton = new Singleton ();            private Singleton (){}            public

模式模式懶漢模式

什麼是單例?單例就是系統執行過程中有且僅有一個例項存在, 即:一個類只有一個例項--最基本的要求(只提供私有構造器),它必須自己建立這個例項(定義靜態的該類的私有物件),它必須自行向整個系統提供這個例項(提供一個靜態的公有方法,返回建立或者獲取本身的靜態私有物件); 單例模

模式三種模式(饑)、飽(懶漢)、雙重鎖模式

singleton pub null 關系 設計模式的 mage 了吧 ref image 今天看某培訓機構提供面試題中設計模式部分,對飽漢和餓漢比較感興趣,就搜了一下,然後誤人子弟,然後就覺得有必要記錄一下 聲明:本人沒有看過設計模式的書籍,只是根據概念對比的看了一些博

模式三種模式(飢)、飽(懶漢)、雙重鎖模式

今天看某培訓機構提供面試題中設計模式部分,對飽漢和餓漢比較感興趣,就搜了一下,然後誤人子弟,然後就覺得有必要記錄一下 宣告:本人沒有看過設計模式的書籍,只是根據概念對比的看了一些部落格; 經典寫法:懶漢和餓漢的最大區別就在於建立物件時候是否例項化;有new就是餓漢,反之就是懶漢,跟加不加syn

模式懶漢式

餓漢式:載入類的時候,就建立了物件 /** * 餓漢式:載入類的時候,就建立了物件 */ public class Ehanshi { // 建立物件 private static Ehanshi ehanshi = new Ehanshi(); // 無參

模式懶漢式的區別

1、餓漢式是在單例類的例項在JVM啟動時就建立好了,懶漢式則是在第一次訪問單例類的例項時才去建立,即可以把餓漢式看成是預載入,懶漢式則為延遲載入; 示例程式碼: public class EagerSingleton { private static final Eag

JAVA設計模式懶漢式的區別)

定義:確保一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 型別:建立類模式 類圖: 類圖知識點: 1.類圖分為三部分,依次是類名、屬性、方法 2.以<<開頭和以>>結尾的為註釋資訊 3.修飾符+代表public,-代表p

設計模式懶漢式

1.設計模式? 設計模式是在大量的實踐中總結和理論化之後優選的程式碼結構,程式設計風格,以及解決問題的思考方式。 2.單例模式的概念?     單例模式,我們首先必須將類在一個虛擬機器中只能產生一個物件,因此應該做到以下幾步:a:私有化構造方法,這樣在該類的外邊就不能用ne

模式懶漢式

常見的單例模式有兩種:餓漢式;懶漢式。 餓漢式程式碼如下: /** * 單例模式之餓漢式 * @author leon * @time 2018年4月27日 下午2:28:14 */ public class HungrySingleton {

Java中模式懶漢式

單例模式顧名思義,就是隻能建立一個物件,這裡就限制了它的構造方法,不能隨便new了。所以用構造方法用private修飾。餓漢式和懶漢式通過名字也是可以區分的。餓漢式,餓了就主動去找食物了,就直接主動建立一個物件。然後通過公共的方法暴露給外部呼叫。懶漢式,懶了就用的時候再去建立

終極模式懶漢式列舉式

/*** * 餓漢式單例,在類初始化時就自行例項化,這樣可以避免執行緒安全問題,但是浪費記憶體空間,不推薦 */ public class HungrySingleton { private

java模式優缺點(懶漢模式模式雙重檢查加鎖模式

三種單例模式實際都是有運用的。 優點:延遲載入 缺點:不加同步的懶漢式是執行緒不安全的,加了synchronized之後就變成執行緒安全的了 public class Singleton { private static Singleton singleto

設計模式模式 (關於懶漢式)

定義 單例模式是比較常見的一種設計模式,目的是保證一個類只能有一個例項,而且自行例項化並向整個系統提供這個例項,避免頻繁建立物件,節約記憶體。 單例模式的應用場景很多, 比如我們電腦的作業系統的回收站就是一個很好的單例模式應用,電腦上的檔案、視訊、音樂等被刪除後都會進入到回收站中;還有計算機中的印表機也是採用

Java—設計模式懶漢設計模式

1.單例模式 定義:一個類只允許產生一個例項化物件。 a.物件如何產生? 通過類的構造方法 b.要想限制物件的產生? 通過構造方法限制,構造方法私有化,類外部無法產生例項化物件。 餓漢式單例:上來就new //餓漢式單例 class Singleton{

Java——多執行緒基本使用(三) 懶漢式的設計模式多執行緒之間的通訊

這一則部落格主要寫的是單例設計模式,與實現多執行緒之間的通訊等等~ 1.單例設計模式:保證類在記憶體中只有一個物件 2.保證類在記憶體中只有一個物件            &

模式懶漢

ati turn 還需 sin 有用 只需要 對象 clas main Java中的單例模式一般分為懶漢模式和餓漢模式,懶漢模式只有用得到的時候對象才初始化,餓漢模式無論用得到與否,都先初始化。 懶漢模式在運行的時候獲取對象比較慢(因為類加載時並沒有創建對象實例),但是加載

模式的實現(懶漢式)

null cte get pri single singleton ins 安全 tin 1.懶漢模式。 class Singleton { private: static Singleton* m_instance; Singleton(

【C++】模式模式懶漢模式

餓漢模式:提前建立一個靜態的類物件,把所有能夠建立物件的模組全部私有化,從外部需要建立類物件時只能返回事先建立好的唯一物件。就像一個特別飢餓的人,提前準備好食物,只要餓了,就可以立刻食用。 /*惡漢模式--單例模式*/ #include<iostream> using namespa

模式懶漢

接下來就說下單例模式了,這個在實際應用還是比較常用的! 首先,單例分為懶漢式和餓漢式: 餓漢式:類載入的時候,建立物件。 因此類載入速度慢, 執行緒相對安全 懶漢式:類載入的時候,不會建立物件,呼叫時