关于单例模式,我想大多数都知道单例很有用,很多时候我们用单例来实现的就是在多个界面都用到一个实例对象的时候,不需要重新new和初始化,赋值一系列操作。除此之外还有一些工具类什么的,像图片加载的工具类通常都会耗费一定的缓存空间,要是反复创建这些对象想想就知道多么的可怕。
普通单例
之所以叫做懒汉只是因为instance只有在真正需要的时候,调用getInstance()获取实例时才会new一个对象。但可能会出现的问题是在多线程中,可能会new出两个对象,然后对instance进行了两次覆盖,不过其实实战中这种情况发生的几率并不高,而且影响一般很小。所以要是使用的时候完全不会出现多线程的问题的话,毫无疑问这是最好的方法。
双重校验锁
我想很多人包括我自己常用的都是这一种方法来实现单例模式,因为这种方法既能避免线程安全问题,而且还能最大限度减少对性能的影响(每次对对象上锁性能都会有所下降)。
静态内部类
这种方法看起来比较绕,主要是利用了classloder的机制来保证初始化instance时只有一个线程。使用和理解都比其它的要困难,建议使用枚举或者双重校验锁的方式。
枚举
据说不少的公司都有人尝试使用这种方法,因为不仅这种方法既可以避免线程安全问题,而且还能防止反序列化重新创建新的对象。
大多数时候我们使用单例的目的也很单纯,所以哪一种顺手就用哪一种吧