單態模式
- 單例類只有一個實例,也就是一個類只能創建一個對象
- 而且該對象只能由該類本身創建:所以類的構造方法必須是
private
的
- 單例類必須給其他對象提供這一個實例
方法1
錯誤版本
public class Singleton {
private Singleton singleton = new Singleton();
private Singleton(){
}
public Singleton getSingleton(){
return singleton;
}
}
- 嘗試調用實例化這個類
- 因爲不可能由外部的類來實例化單例類,因爲單例類的構造方法都是私有的
- 那如何解決?
- 提供靜態方法就好!
- 這樣就無需創建對象,就可以獲得由其內部產生的實例
正確版本
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
}
方法2:和方法1無本質區別
public class Singleton {
private static Singleton singleton;
private Singleton(){
}
public static Singleton getSingleton(){
if (singleton == null){
singleton = new Singleton();
}
return singleton;
}
}