1. 程式人生 > >Java設計模式之單例模式(SingleInstance)

Java設計模式之單例模式(SingleInstance)

模式定義

單例:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

需求背景

在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;
                }
            };