Android技术篇

单例模式

2015-07-11  本文已影响164人  738bc070cd74

Singleton (单例)属于创建型模式

意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

适用性

当类只能有一个实例而且客户可以从一个访问点访问时;
当这个唯一实例应该是通过子类化扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

public class Singleton {

    private static final Singleton instance = new Singleton();
    private Singleton() {}

    // 公共的静态函数,对外暴露获取单例对象的接口
    public static Singleton getInstance() {
        return instance;
    }

}

懒汉模式是声明一个静态对象,并在用户第一次调用时进行初始化。使用 synchorized 关键字实现同步方法。

public class Singleton {

    private static final Singleton instance;
    private Singleton() {}

    // 公共的静态函数,对外暴露获取单例对象的接口
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

} 
public static Singleton getInstance() {  
    if (mInstance == null) {  
        synchronized (Singleton.class) {  
            if (mInstance == null) {  
                mInstance = new Singleton();  
            }  
        }  
    }  
    return mInstance;  
}  
public static Singleton getInstanceFromHolder() {  
    return SingletonHolder.mOnlyInstance;  
}  

/** 
 * 静态内部类 
 */  
private static class SingletonHolder {  
    private static final Singleton mOnlyInstance = new Singleton();  
} 
private static Map objMap = new HashMap();  
/** 
 * 注册对象到map中 
 * @param key 
 * @param instance 
 */  
public static void registerService(String key, Singleton instance) {  
    if (!objMap.containsKey(key) ) {  
        objMap.put(key, instance) ;  
    }  
}  
  
/** 
 * 根据key获取对象 
 * @param key 
 * @return 
 */  
public static Singleton getService(String key) {  
    return objMap.get(key) ;  
}  

优点与缺点

上一篇下一篇

猜你喜欢

热点阅读