Java設計模式:(二)單例模式
單例(Singleton)模式的定義:指一個類只有一個實例,且該類能自行創建這個實例的一種模式。
意圖: 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
主要解決: 一個全局使用的類頻繁地創建與銷燬。
單例模式實現步驟:
1.一個類只有一個實例
如果要做到只有一個實例那麼該的的構造方法不能是public的,是private的。因爲該類的構造方法如果是public的,那就就可以通過new SingleObject() 的方式來生成實例,不能保證只有一個實例
2.生成實例
構造方法是private的,那麼只有該類能夠訪問SingleObject類的構造方法,那麼只能在SingleObject中自己調用構造方法生成實例
private SingleObject instance = new SingleObject();
3.全局只有一個訪問點
如上面的語句已經生成了實例instance,但是該實例,還是private的,只有SingleObject類的成員能夠訪問,這樣是不符合的,那麼爲它新增一個方法來返回該實例getInstance()。還有一點不符合:每調用一次方法就會放回一個實例,這樣是不符合的,那麼爲該方法新增一個static關鍵字,讓他只能生成一個對象。
public static SingleObject getInstance(){
return instance;
}
4.靜態方法只能訪問靜態成員變量
於是爲成員變量新增static關鍵字
private static SingleObject instance = new SingleObject();
下面是單例模式的代碼
public class SingleObject {
//靜態方法只能訪問靜態成員變量
private static SingleObject instance = new SingleObject();
//構造方法爲什麼是私有的,因爲如果是public那麼,每new一個對象就會有一個對象生成,不符合單例模式。所以不可以使用SingleObject instance = new SingleObject();
private SingleObject(){}
//那麼就思考使用類.方法名的方式調用方法,在靜態方法中生成對象。不能每調用一次方法就生成一個對象,那麼就在類中生成一個對象,把它返回給對象。
public static SingleObject getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}