美文网首页
单例模式

单例模式

作者: DominicHan | 来源:发表于2016-12-25 12:13 被阅读0次

确保某个类有且只有一个对象,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。
例如:创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源,这时就要考虑使用单例。

单例关键点:
构造方法私有化
静态方法或者枚举返回单例类对象
多线程环境下确保类对象只有一个
类对象在反序列化时不会重新构建对象

实现方法:
1.饿汉式

  public class Singleton {
       private static final Singleton mInstance = new Singleton();
       private Singleton() {}
       public static Singleton getInstance() {
            return mInstance;
       }
  }

2.懒汉式
synchronized关键字,同步锁,保证多线程情况下单例

public class Singleton {
     private static Singleton mInstance = null;
     private Singleten() {}
     public static synchronized Singleton getInstance() {
          if (mInstance == null) {
               mInstance = new Singleton();
          }
          return mInstance;
     }
}

3.双重检查锁 DCL
DCL能在需要时实例化对象,又能保证线程安全,且初始化实例后不再进入同步代码块
volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。

public class Singleton {
     private volatile static Singleton mInstance = null;
     private Singleton() {}
     public static Singleton getInstance() {
          if (mInstance == null) {
               synchronized (Singleton.class) {
                    if (mInstance == null) {
                         mInstance = new Singleton();
                    }
               }
          }
          return mInstance;
     }
}

4.静态内部类

  public class Singleton {
       private Singleton() {}
       public static Singleton getInstance() {
            return SingletonHolder.mInstance;
       }

       private static class SingletonHolder {
            private static final Singleton mInstance = new Singleton();
       }
  }

5.枚举

public enum SingletonEnum {
    INSTANCE;
    public void doSomething() {
        ............
    }
}

Android中的应用:
系统级别的服务,LayoutInflater等

优点:
减小内存开支,防止资源多重占用

相关文章

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式

    单例模式1 单例模式2

  • java的单例模式

    饿汉单例模式 懒汉单例模式

网友评论

      本文标题:单例模式

      本文链接:https://www.haomeiwen.com/subject/vznrvttx.html