23天学习23种设计模式——单例模式

是什么——什么是单例模式

单例模式(Singleton Pattern),是一种创建型设计模式,它规定了一个类有且只有一个实例存在

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

单例模式类图

为什么——为什么要用单例模式

节约系统资源,避免频繁创建对象。

怎么做——怎么实现单例模式

  • 1.懒汉式单例模式
    懒加载,需加同步保证线程安全。同步方法导致不高效。
/**
 * 懒汉式单例模式
 */
public class LazySingleton {
    
    private static LazySingleton INSTANCE;
    
    private LazySingleton(){
        
    }
    
    public static synchronized LazySingleton getInstance(){
        if(INSTANCE == null){
            INSTANCE = new LazySingleton();
        }
        return INSTANCE;
    }
    
}

  • 2.饿汉式单例模式
    线程安全,非懒加载,某些情况下不适用。
/**
 * 饿汉式单例模式
 */
public class EagerSingleton {
    
    private static EagerSingleton INSTANCE = new EagerSingleton();
    
    private EagerSingleton(){
        
    }
    
    public static EagerSingleton getInstance(){
        return INSTANCE;
    }
    
}
  • 3.双重加锁检查单例模式
    懒加载,线程安全,JDK1.5之前存在问题,不建议使用。
/**
 * 双重加锁检查单例模式
 */
public class DoubleCheckedLockSingleton {

    private static volatile DoubleCheckedLockSingleton INSTANCE;

    private DoubleCheckedLockSingleton(){

    }

    public static DoubleCheckedLockSingleton getInstance(){
        if(INSTANCE == null){
            synchronized (DoubleCheckedLockSingleton.class){
                if(INSTANCE == null){
                    INSTANCE = new DoubleCheckedLockSingleton();
                }
            }
        }
        return INSTANCE;
    }
}

4.静态内部类单例模式
懒加载,线程安全。Effective Java推荐的方法。

/**
 * 静态内部类单例模式
 */
public class StaticNestedClassSingleton {

    private static class SingletonHolder{
        private static final StaticNestedClassSingleton INSTANCE 
         = new StaticNestedClassSingleton();        
    }

    private StaticNestedClassSingleton(){

    }
    
    public static StaticNestedClassSingleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
}

5.枚举单例模式
简单,线程安全,非懒加载,能避免反序列化生成新的对象。

/**
 * 枚举单例模式
 */
public enum EnumSingleton {
    INSTANCE;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,299评论 4 34
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,541评论 1 8
  • 1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务...
    justCode_阅读 1,484评论 2 9
  • 一.什么是单例模式 单例模式的定义:确保一个类只有一个实例,并提供一个访问他的全局访问点。单例模式是几个设计模式中...
    Geeks_Liu阅读 2,248评论 0 10
  • 那天 你“哇”的一声 向这个陌生的世界喧告着你的到来 我就知道 我的人生从此再也没有了严寒 那天 你奶声奶气地叫了...
    三湘涟漪阅读 320评论 28 28