1. 程式人生 > >java 單例模式的幾種實現方式

java 單例模式的幾種實現方式

1.懶漢式

public class Singleton {
	private static Singleton instance = null;

	// 私有化構造方法
	private Singleton() {

	}

	public static Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}

}

呼叫順序時序圖:

單例模式的懶漢式體現了快取的思想,延時載入就是一開始不要載入資源或者資料,一直 等,等到馬上就要使用這個資源的或者資料了,躲不過去了才去載入。

懶漢式是定性的時間換空間,不加同步的懶漢式是執行緒不安全的,如下示例:

如何實現執行緒安全的懶漢式(雙重檢查加鎖):

public class Singleton {
	private volatile static Singleton instance = null;

	// 私有化構造方法
	private Singleton() {

	}

	public static Singleton getInstance() {
		if (instance == null) {
			synchronized (Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
			}

		}
		return instance;
	}

}
2.餓漢式
public class Singleton {
	private static Singleton instance = new Singleton();

	// 私有化構造方法
	private Singleton() {

	}

	public static Singleton getInstance() {
		return instance;
	}

}

餓漢式是典型的空間換時間,當類裝載的時候就會建立類例項,不管你用不用,先創建出來,然後每次呼叫的時候,就不需要判斷了,節省了執行時間。

3.使用靜態內部類實現單例模式

public class Singleton {
	private static class SingletonHoler {
		/**
		 * 靜態初始化器,由JVM來保證執行緒安全
		 */
		private static Singleton instance = new Singleton();
	}

	private Singleton() {
	}

	public static Singleton getInstance() {
		return SingletonHoler.instance;
	}

}

當getInstance方法第一次被呼叫的時候,它第一次讀取SingletonHolder.instance,導致SingletonHolder類得到初始化;而這個類在裝載並被初始化的時候,會初始化它的靜態域,從而建立Singleton的例項,由於是靜態的域,因此只會在虛擬機器裝載類的時候初始化一次,並由虛擬機器來保證它的執行緒安全性。

4.使用列舉來實現單例

public enum Singleton {
	uniqueInstance;// 定義一個列舉的元素,它 就代表了Singleton的一個例項

	public void singletonOperation() {
		// 功能處理
		System.err.println("功能處理");
	}

}
           

相關推薦

Java模式實現方式

開始 名稱 常量 就是 多線程開發 靜態代碼塊 浪費 ack 多線程同步 在平時的工作、學員的學習以及面試過程中,單例模式作為一種常用的設計模式,會經常被面試官問到,甚至筆試會要求學員現場默寫,下面將會就單例模式的實現思路和幾種常見的實現方式進行簡單的分享。

模式實現方式

size ron jdk null singleton bsp 還要 一個 fin 1、餓漢式:靜態常量 特點:單例的實例被聲明成static和final變量了,在第一次加載類到內存中時就會初始化,所以會創建實例本身是線程安全的 public class Sin

Android 模式實現方式及簡析

一.定義: 確保某一個類只有一個例項,而且自行例項並向整個系統提供這個例項 二.使用場景: 避免產生過多的物件消耗過多的資源,或者某種型別的物件只應該有且只有一個。例如,建立一個物件需要消耗的資源過多,如訪問資料庫或者IO 資源。 三.實現單例模式的關鍵

Java 模式實現的差別

單例模式確保某個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 思路是通過將該類的構造方法設為private,那麼在其他類中不能直接例項化該類。那麼為了得到該類的例項,需要有public的static方法來返回該類的例項。(之所以static是為了可以直接用

高併發下最全執行緒安全的模式實現

為了節約系統資源,有時需要確保系統中某個類只有唯一一個例項,當這個唯一例項建立成功之後,我們無法再建立一個同類型的其他物件,所有的操作都只能基於這個唯一例項。 但是餓漢式單例類不能實現延遲載入,不管將來用不用始終佔據記憶體;懶漢式單例類執行緒安全控制煩瑣,而且效能受影響。可

模式6實現方式

一:餓漢式public class MyObject { // 立即載入方式==餓漢模式 private static MyObject myObject = new MyObject();

模式——六實現方式(懶漢、餓漢、雙重檢驗鎖、靜態內部類、列舉)

單例模式 單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式涉及到一個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不

c#模式實現方式

    //單例模式一,本模式具有多執行緒不安全性,可通過多執行緒鎖來實現功能     public class Class1     {         //(1)將建構函式定義為private         private Class1()         {  

模式寫法

遺憾 想象 develop 由於 tcl loader adr 希望 線程不安全 第一種(懶漢,線程不安全): Java代碼 public class Singleton { private static Singleton instance;

java寫法

多線程 ibm 顯示 詳細 作者 jdk1.5 需要 fin serial 轉載出處:http://cantellow.javaeye.com/blog/838473 第一種(懶漢,線程不安全): 1 public class Singleton { 2 pr

java 模式5寫法

浪費 get public color ring 缺點 threads 構造函數 java 單例模式 學習整理 飽漢模式(懶漢模式) 1 // 飽漢 2 // UnThreadSafe 3 public class Singleton1 { 4 private

的三實現方式

In imp SQ span wrap 定制 bsp () import 一:類方法實現單例 class Mysql: __instance = None def __init__(self,host,port): self.ho

Java 定時任務的實現方式

java作業調度 tails 監聽器 ever 觸發 posit exist ttr 輕量級 JAVA實現定時任務的幾種方式 @(JAVA)[spring|quartz|定時器]   近期項目開發中需要動態的添加定時任務,比如在某個活動結束時,自動生成獲獎名單,導出exce

C++之智慧指標和普通指標模式實現

1  問題 實現c++的單例模式,這裡測試分別寫了通過智慧指標返回物件和普通返回指標     2  程式碼測試 include <iostream> #include <mutex> #include <m

的兩實現方式、多個版本及利弊對照

        單例設計模式,顧明思議,只有一個例項,先交代重要一點,為防止外界對該類進行例項化,需要把類的建構函式宣告為私有的,這樣大家對原理理解更深入些。 1、餓漢式 餓漢模式單例程式碼,經典,可用,無需改進。 package com.sing

模式建立方式

在建立單例模式的時候,如果單純的只考慮單例而不思考那樣做的話會產生什麼問題這樣是不嚴謹的,比如會發生執行緒安全問題,看了一些文章其中一篇寫得非常詳細有關單例模式的問題和效能比較,這篇文章http://blog.sina.com.cn/s/blog_62c7c3030100zw

Java模式的正確實現

Java單例模式 單例的好處 單例模式適合於應用中頻繁建立的物件,如果是重量級的物件,更應該使用單例模式。比如配置檔案,如果不採用單例模式的話,每個配置檔案物件的內容都是一樣的,建立重複的物件就會浪費寶貴的記憶體,所以有必要使用單例模式,達到效能的提升,

JAVA模式6寫法(附反射破壞

java中單例模式是一種常見的設計模式,單例模式的寫法有多種,這裡主要介紹6種寫法:餓漢式單例、懶漢式單例3個、靜態內部類,列舉。   單例模式有以下特點:   1、單例類只能有一個例項。   2、單例類必須自己建立自己的唯一例項。   3、單例類必須給

Java模式(Singleton)以及實現

一. 什麼是單例模式 因程式需要,有時我們只需要某個類同時保留一個物件,不希望有更多物件,此時,我們則應考慮單例模式的設計。 二. 單例模式的特點 1. 單例模式只能有一個例項。 2. 單例類必須建立自己的唯一例項。 3. 單例類必須向其他物件提供這一例項。 三. 單例模式VS靜態類 在知道了什麼是單例模式後

python模式實現方法

1.方法1,程式執行過程中,某個類物件只有1個,該類物件的例項物件可以有無數個,根絕這點,讓類物件持有一個例項化物件,重寫類物件的__new__方法,始終返回持有的這個例項化物件,即可實現單例模式。 class Person1: _single = None