/**
* 採取一定的方法保證在整個的軟件系統中,對 某個類只能存在一個對象實例,並且該類只提供一個取得其對象實例的方法。
* 如果我們要讓類在一個虛擬機中只能產生一個對象,我們首先必須將類的構 造器的訪問權限設置爲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、內部的產生對象的方法也是靜態的,產生的對象也是靜態的
- 靜態方法只能訪問類中的靜態成員變量,所以,指向類內部產生的該類對象的變量也必須定義成靜態的。
總結:知其然 知其所以然,知道原理才能更好的寫代碼