一般单例都是一个类写一个的,这里单例和模版模式结合起来了
抽象类
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; } } }
具体使用
private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() { protected IActivityManager create() { IBinder b = ServiceManager.getService("activity"); if (false) { Log.v("ActivityManager", "default service binder = " + b); } IActivityManager am = asInterface(b); if (false) { Log.v("ActivityManager", "default service = " + am); } return am; } };
不过有2个地方是否可以优化一下
1、IActivityManager 没有私有化构造方法,可能会被再次构造出来
2、 mInstance用volatile修饰可以避免多线程可见性的问题
总的来说,把单例的流程抽象出来是不错的