1. 程式人生 > >簡單理解設計模式之單例模式

簡單理解設計模式之單例模式

1.什麼是單例模式?我們為什麼要用單例模式?

首先我們要知道我們為什麼要用單例模式,其實在很多的時候我們都用到了單例模式,這也是很經常要用到的,比如一個物件我們只需要它例項化一次,不允許它任意的建立。其實這就是單例模式,就是我們要一個物件只例項化一次,比如資料庫的連線。。

2.單例模式有哪些?

常用的單例模式分為兩種:一種是懶漢模式,另一種是餓漢模式。

3.怎麼理解這兩種常用的單例模式?

(1)餓漢模式:其實就是先例項化我們需要建立的單例物件。 ---餓壞了,迫不及待的想吃東西,就叫做餓漢模式。 (2)懶漢模式:當我們需要用到單例物件的時候再例項化。 ---你不用,我就不例項化。 但是總的來說建立單例模式的基本步驟是一樣的:

步驟如下:

第一步:例項化該類的建構函式,

第二步:私有靜態化例項物件,保證只在本類執行

第三步:返回一個共有的函式,返回該例項物件

4.通過程式碼來說詳細的講解:

(1)餓漢模式
public class HungrySingleTon {
	
	private static HungrySingleTon instance = new HungrySingleTon();//迫不及待的想吃東西--建立物件
	
	private HungrySingleTon(){
		
	}
	
	public static HungrySingleTon getInstance(){
		return instance;
	}

}
(2)懶漢模式
public class LazySingleTon {
	
	private static LazySingleTon instance;//很懶啊,不想建立,因為沒有用到
	
	private LazySingleTon(){
		
	}
	
	public static LazySingleTon getInstance(){
		if(instance == null){
			instance = new LazySingleTon();
		}
		return instance;
	}

}
5.上面兩種各單例模式的“變種”(也是常用的):

(1)靜態內部類的方法

public class CommonSingleTon {
	
	private static class SingleTon{
		private static CommonSingleTon instance = new CommonSingleTon();
	}
	private CommonSingleTon(){
		
	}
	public static CommonSingleTon getInstance(){
		return SingleTon.instance;
	}
}
(2)雙重檢測,執行緒安全的(但不是保證百分百安全)
public class SingleTon {

	private volatile static SingleTon instance = null;
	
	private SingleTon(){}
	
	public static SingleTon getSingleTonInstance(){
		if(instance==null){
			synchronized (SingleTon.class) {
				if(instance == null){
					return instance = new SingleTon();
				}
			}
		}
			return instance;
		
		
	}

}

單例模式其實還有很多的變種,比如同步方法,LockL的方法等等,還有列舉的方法,但是都離不開他的概念,工作中可以慢慢的體會檢索。

有不對的地方歡迎指教。