设计模式 -- 单例模式

单例模式保证为一个类生成唯一的实例对象;
Android中 Application 可以说是单例模式的一个类;

  • 优点:
    实例时,只需调用一个单一的方法即可生成一个唯一的实例,节约资源,减少内存开销;
    避免对资源的多重占用;
  • 缺点:
    很难实现序列化,导致很难被持久化,也难通过网络传输;
    由于单例采用静态方法,无法在继承结构中使用
对照表.png
/**
* Created by curry on 2017/8/9
* 单例模式
*/

public class Singleton {

   private Singleton() {
   }
   /**
    * 饿汉式 : 适合初始化时就要用到单例的情况;适合初始化速度快(操作少),占用非常小的内存情况
    * 

* 多线程下不会出现问题,因为JVM只会实例一个单例类 */ private static Singleton mSingleton = new Singleton(); public static Singleton newInstance() { return mSingleton; } /** * 懒汉式 : 适合有耗时操作,占用内存大,对启动速度有要求,只在特定场景使用一般不用的情况 可以延时加载单例 *

* 多线程下会出现问题,可能会创建多个单例 */ private static Singleton mSingleton = null; public static Singleton newInstance() { if (mSingleton == null) { mSingleton = new Singleton(); } return mSingleton; } /** * 方案一: * 解决实现 : 线程安全 和 延时加载 *

* 通过实现内部类,这样加载单例时就不会再重新实例 */ private static class SingletonHolder { private static Singleton mSingleton = new Singleton(); } public static Singleton newInstance() { return SingletonHolder.mSingleton; } /** * 方案二:双重校验锁 * 加同步锁,来解决多线程问题 */ private static volatile Singleton mSingleton = null; public static Singleton newInstance() { if (mSingleton == null) { synchronized (Singleton.class) { if (mSingleton == null) { mSingleton = new Singleton(); } } } return mSingleton; } public void doSomething() { //Do something ... } }

你可能感兴趣的:(设计模式 -- 单例模式)