美文网首页
设计模式:单例模式

设计模式:单例模式

作者: 末日声箫 | 来源:发表于2019-07-21 00:32 被阅读0次

单例模式:

保证一个类只有一个实例,并且提供一个全局访问点。

使用场景:

单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此在对象需要被公用的情况下使用适合使用

单例优点:

  • 只有一个实例,节约内存
  • 只创建一次,加快访问速度。
  • 提供了对唯一实例的受控访问。
  • 避免对共享资源的多重占用。

缺点:

  • 单利模式中没有抽象层,因此单例类的扩展有很大的困难。
  • 单例类的职责过重,在一定程度上违背了“单一职责原则”。

单例模式的几种实现方式:

  • 饿汉模式:
    在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
package headFirst.Singleton;

/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:04
 */
public class Hungry {
    private static Hungry instance = new Hungry();
     private Hungry (){
     }
     public static Hungry getInstance() {
     return instance;
     }
}

  • 懒汉模式(线程不安全)
    在用户第一次调用时初始化,线程不安全
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:18
 */
public class Lazy {
      private static Lazy instance;  
      private Lazy (){
      }   
      public static Lazy getInstance() {  
      if (instance == null) {  
          instance = new Lazy ();  
      }  
      return instance;  
      }  
 
}
  • 懒汉模式(线程安全)
    加锁保证线程安全
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:21
 */
public class LazySafe {
       private static LazySafe instance;
      private LazySafe (){
      }
      public static synchronized LazySafe getInstance() {
      if (instance == null) {
          instance = new LazySafe();
      }
      return instance;
      }
}
  • (懒汉)双重检查模式
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:24
 */
public class DCL {
        private volatile static DCL instance;  
      private DCL (){
      }   
      public static DCL getInstance() {  
      if (instance== null) {  
          synchronized (DCL.class) {  
          if (instance== null) {  
              instance= new DCL();  
          }  
         }  
     }  
     return instance;  
     }
}
  • (懒汉)静态内部类单例模式
    第一次加载Singleton类时并不会初始化sInstance,只有第一次调用getInstance方法时虚拟机加载SingletonHolder 并初始化sInstance
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:26
 */
public class Singleton {
        private Singleton(){
    }
      public static Singleton getInstance(){  
        return SingletonHolder.sInstance;  
    }  
    private static class SingletonHolder {  
        private static final Singleton sInstance = new Singleton();  
    }
}
  • 枚举
    线程安全,简单,但是可读性不强,建议加注释
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:28
 */
public enum SingletonEnum {
    INSTANCE;
}

相关文章

  • 单例模式Java篇

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

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

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

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

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

网友评论

      本文标题:设计模式:单例模式

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