Java設計模式之單例模式(SingleInstance)
阿新 • • 發佈:2018-11-12
模式定義
單例:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。
需求背景
在App程序中保證類的例項唯一性,例如資料庫訪問入口等。
注意:建構函式可見性為private。這樣使得外面的類不能通過引言來產生物件。
構造器(Constructor)宣告為private的話,外面不能例項化,典型的單例模式和一些工具類(提供靜態方法),都把構造器宣告為private。所以要得到這個類的例項只能是類名.method()取的它例項
具體實現
1 自己實現的單例模式
public class Singleton{
//單個例項宣告為私有
private static SingleInstance mInstance;
.......
//構造方法宣告為私有
private SingleInstance(){
}
......
//獲取單例的公共入口
public static SingleInstance getInstance() {
if (mInstance == null) {
//保證只有建立例項的時候才加鎖,執行緒安全模型
synchronized (SingleInstance.class) {
if (mInstance == null) {
mInstance = new SingleInstance();
}
}
}
return mInstance;
}
}
2 Android中提供的單例模式模板
public abstract class Singleton<T> {
private T mInstance;
protected abstract T create();
public final T get() {
synchronized (this) {
if (mInstance == null) {
mInstance = create();
}
return mInstance;
}
}
}
使用,例如獲取ActivityManager的代理物件
public static IActivityManager getService() {
return IActivityManagerSingleton.get();
}
private static final Singleton<IActivityManager> IActivityManagerSingleton =
new Singleton<IActivityManager>() {
@Override
protected IActivityManager create() {
final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE);
final IActivityManager am = IActivityManager.Stub.asInterface(b);
return am;
}
};