1. 程式人生 > >JAVA基礎(51)---單例設計模式

JAVA基礎(51)---單例設計模式

設計模式

設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。 毫無疑問,設計模式於他人於系統都是多贏的,設計模式使程式碼編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理的運用設計模式可以完美的解決很多問題,每種模式在現在中都有相應的原理來與之對應,每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是它能被廣泛應用的原因。

設計模式的分類

總體來說設計模式分為三大類:

  1. 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
  2. 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
  3. 行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式        

單例模式(單例項模式)

     在整個類執行期間,保證有該類建立的物件,永遠只有一個物件(怎麼做?)。

  1. 建立物件。使用new關鍵字呼叫相應的構造方法來產生物件。將構造方法私有化
  2. 對外提供一個獲取該類的例項的方法

步驟:

  1. 將構造方法進行性私有化(private)
  2. 需要提供一個公共可以獲取該類的物件的一個方法。返回值型別:該類型別;方法的訪問修飾符:public  static
  3. 需要一個該類型別的靜態變數。變數的修飾符:private static  該類型別 變數名稱

懶漢式

在步驟二中,先判斷,靜態變數的引用是否為null;如果為null則為該引用建立一個物件;如果不為null就將該引用直接返回。

package org.lanqiao.singletondemo;
/*
 * 在外部獲取該類的物件的時候,永遠獲取到的都是同一個物件
 * 1 將構造方法私有化
 * 2 對外提供獲取該類例項的公開方法
 * 3 提供一個靜態的本類型別的一個類變數
 * 懶漢式
 */
public class Singleton {

	private static Singleton s = null;
	private Singleton() {
		
		
	}
	public static Singleton getSingletonInstance() {
		if(s == null) {
			
			s= new Singleton();
		}
		
		return s;
		
	}
}

    餓漢式

在步驟三中,在變數宣告的時候,就為變數進行了初始化

package org.lanqiao.singletondemo;

public class Singleton2 {


	private static  final Singleton2 s = new Singleton2();
	private Singleton2() {
		
		
	}
	public static Singleton2 getSingletonInstance() {
		
		
		return s;
		
	}
}

單例設計模式記憶體儲存


public class TestSingleton {
	public static void main(String[] args) {
		Singleton s1 = Singleton.getSingletonInstance();
		Singleton s2= Singleton.getSingletonInstance();
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s1 == s2);
		
	}
}