Java-設計模式-單例模式-餓漢式-static


/**
 * 採取一定的方法保證在整個的軟件系統中,對 某個類只能存在一個對象實例,並且該類只提供一個取得其對象實例的方法。
 * 如果我們要讓類在一個虛擬機中只能產生一個對象,我們首先必須將類的構 造器的訪問權限設置爲private,這樣,就不能用new操作符在類的外部產生
 * 類的對象了,但在類內部仍可以產生該類的對象。因爲在類的外部開始還無 法得到類的對象,只能調用該類的某個靜態方法以返回類內部創建的對象,
 * 靜態方法只能訪問類中的靜態成員變量,所以,指向類內部產生的該類對象 的變量也必須定義成靜態的。
 * 
 * @author wenpeng_wang
 *
 */
public class SingletonTest3 {

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

class Singleton {
	// 私有的構造
	private Singleton() {
	}

	// 創建類的對象
	private static Singleton instance = new Singleton();

	// 靜態方法 外部調用
	public static Singleton getInstance() {
		return instance;
	}
}

單例模式怎麼寫,爲什麼這麼寫

  • 某個類只能存在一個對象實例,並且該類只提供一個取得其對象實例的方法。
  • 1、私有化構造,外面調用不能new
  • 如果我們要讓類在一個虛擬機中只能產生一個對象,我們首先必須將類的構 造器的訪問權限設置爲private,這樣,就不能用new操作符在類的外部產生
  • 2、靜態方法返回類的對象
  • 3、類的內部有創建對象的方法
  • 類的對象了,但在類內部仍可以產生該類的對象。因爲在類的外部開始還無法得到類的對象,只能調用該類的某個靜態方法以返回類內部創建的對象,
  • 4、內部的產生對象的方法也是靜態的,產生的對象也是靜態的
  • 靜態方法只能訪問類中的靜態成員變量,所以,指向類內部產生的該類對象的變量也必須定義成靜態的。

總結:知其然 知其所以然,知道原理才能更好的寫代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章