Java 單例設計模式

2020-10-29 11:01:22

Java單例設計模式

一、什麼是單例設計模式

單例設計模式,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在一個物件範例,並且該類只提供一個取得其物件範例的方法。

二、如何應用單例設計模式

根據定義,一個類只能存在一種物件範例,所以我們需將類的構造存取許可權設定成private,只能在類內進行操作。因為在類的外部開始還無法得到類的物件,只能呼叫該類的某個靜態方法以返回類內部建立的物件, 靜態方法只能存取類中的靜態成員變數,所以,指向類內部產生的該類物件的變數也必須定義成靜態的。

三、單例設計模式的分類

a.餓漢式

① 私有化類的構造器

②內部建立類的物件

要求此物件必須宣告為靜態

④提供公共的靜態方法,返回當前類的物件

class Singleton{
	//私有化類的構造器
	private Singleton() {
		
	}
	//內部提供當前類的範例
	//此範例必須靜態化
	private static Singleton single = new Singleton();
	//提供公共的靜態方法,返回當前類的物件
	public static Singleton getSingleton() {
		return single;
	}
}

b.懶漢式

①私有化類的構造器

②宣告當前類物件,沒有初始化

此物件也必須宣告沒static

④提供靜態的方法,返回當前類的物件

class Singleton{
	//私有化類的構造器
	private Singleton() {
		
	}
	//內部提供當前類的範例
	//此範例必須靜態化
	private static Singleton single ;
	//提供公共的靜態方法,返回當前類的物件
	public static Singleton getSingleton() {
		if(single == null) {
			single = new Singleton();
		}
		return single;
	}
}

當然你也要問這兩個有什麼區別,就是你不問我也會寫出這兩個的區別

餓漢式和懶漢式的區別:

    餓漢式:

        好處:餓漢式是執行緒安全的

        壞處:物件載入時間過長(佔用記憶體空間)

    懶漢式:

        好處:延遲物件的建立(不佔用記憶體空間)

        壞處:執行緒不安全

一般我們寫程式的時候,寫懶漢式.

四、單例設計模式的應用場景

a. 資料庫連線池的設計一般也是採用單例模式,因為資料庫連線是一種資料庫資源

b.計數器,一般也是單例模式實現,否則難以同步。