1. 程式人生 > >策略模式之單例模式

策略模式之單例模式

將類的構造器私有化,然後提供一個返回值,供其他類例項化物件,這樣例項化的物件就只能有一個物件。一個類,一個 JVM 中,就只有一個例項存在。

大體思路:

  1. 將構造器私有化;
  2. 將提供的呼叫的靜態值指向例項;
  3. 返回靜態屬性

程式碼:通過將 Earth 類的構造器私有化,其他類就不能訪問這個構造器,只能通過 Earth 類中自己提供的變數或者方法呼叫,這樣其他類在例項化 Earth 類的時候,例項化的物件就只能是一個。

public class Earth {
	String name;
	int year;
	private Earth() {}
	public static Earth earth = new Earth();
}
public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Earth e1 = Earth.earth;
		Earth e2 = Earth.earth;
		System.out.println(e1==e2);
	}

}

上面的屬於 餓漢式 單利模式,無論是否被呼叫,都會被載入,而 懶漢式 只是需要的時候才進行載入,下面是 懶漢式  的單例模式。

public class Earth {
	String name;
	int year;
	private Earth() {}
	public static Earth earth;
	public static Earth getEarth() {
		if(earth == null) {
			earth = new Earth();
		}
		return earth;
	}
}
public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Earth e1 = Earth.earth;
		Earth e2 = Earth.getEarth();
		System.out.println(e1==e2);
	}

}

上面的例子輸出 false,因為懶漢式的只是需要的時候才載入,如果將 e1 改成和 e2 一樣的話,則會輸出 true。

如果業務有比較充分的啟動時間和載入時間就使用 餓漢模式,否則的話就使用 懶漢模式.