单例模式

来源:互联网 发布:c语言实现快速排序法 编辑:程序博客网 时间:2024/06/05 23:52

单例模式

读了Android源码设计模式解析与实战的个人总结
推荐使用静态内部类单例,配合一个map进行管理
管理类

public class SingletonManager {    private static Map<String, Object> objMap = new HashMap<String, Object>;    private SingletonManager(){    }    public static void registerService(String key, Object instance) {        if (!objMap.containsKey(key)) {            objMap.put(key, instance);        }    }    public static Object getService(String key) {        return objMap.get(key);    }}

静态内部类单例

延迟加载,减少内存开销。因为用到的时候才加载,避免了静态field在单例类加载时即进入到堆内存的permanent代而永远得不到回收的缺点(大多数垃圾回收算法是这样)。

public class Singleton {    private Singleton(){    }    /**     * 该方法调用的时候,虚拟机才会加载内部类     * @return     */    public static Singleton getInstance(){        return SingletonHolder.sInstance;    }    /**     * 静态内部类唯一存在     */    private static class SingletonHolder{        private static final Singleton sInstance = new Singleton();    }}

枚举单例

很好,不仅能避免多线程同步问题,
而且还能防止反序列化重新创建新的对象。
但是失去了类的一些特性,
没有延迟加载

public enum  SingletonEnum {    INSTANCE;    public void doSomething(){        System.out.println("do sth.");    }}
0 0
原创粉丝点击