1. 程式人生 > >第一章:Java設計模式-單例模式

第一章:Java設計模式-單例模式

一、單例模式-餓漢模式

package com.xm.designpattern.single;

/**
 * 單例模式-餓漢模式
 * 原理: 不管是否使用,類載入時就初始化好
 * 缺點: 非執行緒安全,只適合單執行緒使用
 * @author ouyangjun
 *
 */
public class HungrySingle {

	private HungrySingle hungrySingle = new HungrySingle();
	
	public HungrySingle getInstance(){
		return hungrySingle;
	}
	
}

二、單例模式-懶漢模式

package com.xm.designpattern.single;

/**
 * 單例模式-懶漢模式
 * @author ouyangjun
 */
public class LazySingle {
	
	/**
	 * 原理: 在需要用到例項的時候才去建立
	 * 缺點: 非執行緒安全,只適合單執行緒使用
	 * @return
	 */
	private LazySingle lazySingle = null;
	
	public LazySingle getInstance(){
		if(lazySingle==null){
			lazySingle = new LazySingle();
		}
		return lazySingle;
	}
	
	
	/**
	 * 原理: 在需要用到例項的時候才去建立
	 * 缺點: 執行緒安全,可多執行緒使用,但比較消耗效能,因為不是所有情況都需要同步
	 * @return
	 */
	private LazySingle lazySingleSafe = null;
	
	public synchronized LazySingle getInstanceSafe(){
		if(lazySingleSafe==null){
			lazySingleSafe = new LazySingle();
		}
		return lazySingleSafe;
	}
	
}

三、單例模式-懶漢模式,雙重安全校驗

package com.xm.designpattern.single;

/**
 * 單例模式-懶漢模式,雙重安全校驗
 * 原理: 當例項為空的時候,先鎖定,再建立例項,再放開鎖,原理上是沒問題的,可使用
 * 缺點: 多重校驗,容易出錯
 * @author ouyangjun
 */
public class DoubleLazySingle {
	
	private DoubleLazySingle doubleLazySingle = null;
	
	public DoubleLazySingle getInstance(){
		if(doubleLazySingle==null){
			synchronized(DoubleLazySingle.class){
				if(doubleLazySingle==null){
					doubleLazySingle = new DoubleLazySingle();
				}
			}
		}
		return doubleLazySingle;
	}
	
}

四、單例模式-內部類實現(推薦使用)

package com.xm.designpattern.single;

/**
 * 單例模式-內部類實現
 * 原理: 單列初始化不會載入,在呼叫getInstance()方法時才進行載入,推薦使用
 * @author ouyangjun
 */
public class InternalClassSingle {

	private static class InternalClassSingleHolder {
		private static InternalClassSingle internalClassSingle = new InternalClassSingle();
	}
	
	public InternalClassSingle getInstance() {
		return InternalClassSingleHolder.internalClassSingle;
	}
	
}

本章完結,待續!

本文說明:該文章屬於原創,如需轉載,請標明文章轉載來源

相關推薦

第一Java設計模式-模式

一、單例模式-餓漢模式 package com.xm.designpattern.single; /** * 單例模式-餓漢模式 * 原理: 不管是否使用,類載入時就初始化好 * 缺點: 非執行緒安全,只適合單執行緒使用 * @author ouyangjun

Java設計模式(三種寫法)

最近在一些部落格上面看到的單例模式,無一例外都是餓漢和懶漢,這兩個確實是單例模式,但是各有自己的弊端 先上程式碼吧 //餓漢式 class ClassA{ private static final ClassA instance = new ClassA(); pub

java面試題java中的設計模式及兩種實現方法的程式碼舉例

java面試時經常會問到關於單例設計模式,因為它能考察的知識點較多且在開發中經常用到。那我就來說一說我對於單例設計模式的一些淺見。首先,在Java中,什麼是單例呢?就是保證類在記憶體中只有一個物件。那麼

Java設計模式 - 模式

選擇 工廠方法 ech http locking 理解 多個 reg getname 本文繼續介紹23種設計模式系列之單例模式。 概念:  Java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這裏主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。  單例模式有

Java枚舉enum以及應用枚舉實現模式

tee configure adr 自由 這樣的 pre 單例模式 做到 build 枚舉作為一個常規的語言概念,一直到Java5才誕生不得不說有點奇怪,以至於到現在為止很多程序員仍然更喜歡用static final的形式去命名常量而不使用,一般情況下,Java程序員用這種

Java設計模式-模式

影響 沒有 環境 成員 == 比較 .net 非線程安全 align 轉自:http://blog.csdn.net/jason0539/article/details/23297037   Java中單例模式是一種常見的設計模式,單例模式的寫法有多種,這裏主要只介紹:懶漢

Java 設計模式 ------ 模式

stat out instance bsp 問題 構造函數 程序開發 div .cn   在程序開發中,有時我們只需要一個對象就可以了,如日誌對象,工具類,怎麽樣保證整個應用程序中有且只有一個對象呢?這就要用到單例模式了,通過名字就可以看出來,它就是保證整個應用程序中只有一

Java設計模式--模式

提高 安全問題 color 自動 如果 排序 get 重排序 col 直想寫點關於設計模式的東西,卻懶到現在都沒寫過什麽,今天上午看到項目中的代碼,就在這個中午抽出時間寫點東西,拋個項目截圖先: 單例模式: 單例模式,是一種常用的軟件設計模式。在它的核心結構

java設計模式----模式

pri 獲取對象 tor 能夠 指向 style aps view 5.1 1.單例模式   1.1.引言:據我了解,單例模式應該屬於java設計模式中較為簡單的一個設計模式,作為設計模式的開篇,先從簡單入手,來慢慢理解設計模式。   1.2.定義:單例模式,是一種常用的軟

JAVA 設計模式模式

成員變量 說明 不用 spa java程序 成員 AS AI 唯一性 JAVA中的單例模式是一種廣泛使用的設計模式,是Java裏23種設計模式之一。單例模式的作用是保證在JAVA程序中,某個類只有一個程序存在。 這裏簡單介紹其兩種基本寫法:餓漢式和懶漢式。 餓漢式與懶漢式區

JAVA設計模式-模式(Singleton)線程安全與效率

保存 ring 使用方法 部分 rac cheng 原因 cts 要求 一,前言   單例模式詳細大家都已經非常熟悉了,在文章單例模式的八種寫法比較中,對單例模式的概念以及使用場景都做了很不錯的說明。請在閱讀本文之前,閱讀一下這篇文章,因為本文就是按照這篇文章中的八種單例模

java常用設計模式--模式簡單例子

package com.ruanyun;/** * @Auther: maxw * @Date: 2018/11/10 17:29 * @Description: */public class Test4 { public static void main(String args[]){

java設計模式(模式)的效能及思想

                 單例模式:    單例模式是設計模式中使用最普遍的模式之一,是一種物件建立模式,用於生產一個物件的具體例項,塔可以確保系統中一個類只產生一個例項.那麼在j

Java設計模式 —— 模式

單例模式的定義: 一個類只能建立一個例項,每個例項有一個全域性唯一的訪問點 我們為什麼需要單例模式:   有一些物件我們只需要一個,如執行緒池(threadpool)、快取(cache)、日誌物件、充當驅動程式的物件等。如果創建出多個例項,就會導致很多問題的產生,例如:

Java設計模式-模式、觀察者模式、工廠模式

單例設計模式 概念: 全域性只有一個例項,自行例項化物件,自行向整個系統提供這個例項。 應用場景: 需要全域性只有一個例項的時候,如儲存使用者資訊。 只有一個訪問途徑 優點: 全域性只有一個例項,避免了頻繁的建立例項,耗費的資源。 提

設計模式模式(關鍵詞設計模式/模式/單件模式

設計模式 單例模式 定義 單例模式:允許一些物件中只存在 1 個例項。 類裝飾器版本 1:使用 1 個全域性字典,儲存所有類的例項。 instances = {} def getInstances(aClass, *args): if aClass not in i

java設計模式——模式(三)

容器單例模式 之前學習Structs2,Spring框架時,經常會聽到單例,多例。雖然這與單例模式不太一樣,但是都很類似。在程式執行的時候,就載入所有的例項,然後用的時候直接取出 看下面程式碼: /** * @program: designModel * @description: 容器單例模

JAVA設計模式-模式(Singleton)執行緒安全與效率

一,前言   單例模式詳細大家都已經非常熟悉了,在文章單例模式的八種寫法比較中,對單例模式的概念以及使用場景都做了很不錯的說明。請在閱讀本文之前,閱讀一下這篇文章,因為本文就是按照這篇文章中的八種單例模式進行探索的。   本文的目的是:結合文章中的八種單例模式的寫法,使用實際的示例,來演示執行緒安全和效率  

設計模式Java隨筆)—模式

單例模式(Singleton Pattern):5種建立型模式中的一種,有關單例模式的所有建立方法參考:Java單例模式——並非看起來那麼簡單(總結不易,感謝!),本文中,我只對開發中常用的兩種(多執行緒)方法和Java特有的列舉法進行程式碼複寫。 首先,還是貼一下單例的定

[Java] [設計模式] [ 模式 ]

定義 確保單例類只有一個例項,並且這個單例類提供一個函式介面讓其他類獲取到這個唯一的例項。 如果某個類,建立時需要消耗很多資源,即new出這個類的代價很大; 或者是這個類佔用很多記憶體,如果建立太多這個類例項會導致記憶體佔用太多。上述情況下就應該使用單例模式 單