美文网首页
单例模式

单例模式

作者: LogyKoala | 来源:发表于2019-10-10 12:06 被阅读0次
  1. 为什么使用单例模式
    • 节约内存开销,提高效率,提高资源使用率。
  2. 单例模式的特点
    • 构造方法私有化
    • 定义静态方法,并且返回当前的对象
    • 确保这个对象是唯一的
    • 确保序列化和反序列化操作的过程中同样保证同一个对象
    • 不允许继承的
  3. 角色划分
    • 客户端(调用)
    • 单例类
  4. 变种
    1. 饿汉

      public final class Singleton{
          private static Singleton instance =new Singleton();
          private Singleton(){
          }
          public static Singleton getInstance(){
              return instance;
          }
      }
      
      • 优点:安全,不用关心单线程还是多线程
      • 缺陷:耗费内存
    2. 懒汉(单线程使用)

      public final class Singleton{
          private static Singleton instance;
          private Singleton(){
          }
          public static Singleton getInstance(){
              if(instance ==null){
                 instance = new Singleton();
              }
              return instance;
          }
      }
      
      • 优点:节约内存,提高性能
      • 缺点:多线程问题很难解决
        • 不加锁,创建多个对象
        • 加锁,阻塞,耗费性能
    3. 双重检查

      public final class Singleton{
          //volatile 去掉虚拟机优化代码,为了防止双重检查失败
          //编译器编译时对以下代码做了什么事情
          //Singleton instance = new Singleton()
          //1. 分配内存
          //2. 掉用构造方法初始化参数
          //3. 将instance对象指向这快内存区域
          private static volatile Singleton instance;
          private Singleton(){
          }
          public static Singleton getInstance(){
              if(instance ==null){
                  synchronized(Singleton.class){
                      if(instance ==null){
                          instance = new Singleton();
                      }
                  }
              }
              return instance;
          }
      }
      
      • 优点:既能保证创建对象是单例对象,也保证了多线程安全
      • 缺点:消耗性能,可以忽略不计
    4. 静态内部类(官方推荐,多线程使用)

      public final class Singleton{
          private Singleton(){
          }
          public static Singleton getInstance(){
              return SingletonHolder. instance;
          }
          public static class SingletonHolder{
              private static Singleton instance =new Singleton();
          }
      }
      
      • 优点:既能保证内存优化, 又能保证安全
    5. 枚举

      public enum Singleton{
        instance;
      }
      
  5. 具体应用
    工具类,

相关文章

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: 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/crunpctx.html