单例模式,今天你用了嘛

作者: TTLLong | 来源:发表于2019-02-13 11:46 被阅读8次

1.前言

提起设计模式,可能大家有些人会感觉陌生,有些人会觉得经常使用。其实说到设计模式,不用感到陌生与害怕,其实我们每天在不经意间都在或多或少的使用或者接触设计模式。这篇文章就是想带大家了解最基础的设计模式,单例模式!

2.简介

单例模式是指,有且只有一个该类的实例化对象,并且实例化过程由这个类自己实现。该类的构造函数是私有化的。

3.常见的几种单例模式

饿汉式单例模式

/**
 * 作者:jtl
 * 日期:Created in 2019/1/25 15:48
 * 描述:饿汉式单例模式
 * 优点:1.空间换时间,每次都直接加载,节约了创建实例的时间
 * 缺点:1.因为不管是否用到了该类,都会直接创建实例,所以在不使用的情况下,就浪费了空间
 */

public class HungrySingleton {
    private static HungrySingleton sSingleton = new HungrySingleton();

    private HungrySingleton(){}

    public static HungrySingleton getInstance(){
        return sSingleton;
    }
}

懒汉式单例模式

/**
 * 作者:jtl
 * 日期:Created in 2019/1/25 15:45
 * 描述:懒汉式单例模式
 * 优点:1.时间换空间,在调用的时候才创建实例,节约了空间
 *      2.每次getInstance的时候才创建实例,节约了资源
 *
 * 缺点:1.每次在调用的时候才创建实例,有点浪费时间
 *      2.每次调用getInstance都需要线程同步,造成不必要的开销
 */

public class LazySingleton {
    private static LazySingleton sSingleton;

    private LazySingleton(){}

    public static synchronized LazySingleton getInstance(){
        if (sSingleton==null){
            sSingleton=new LazySingleton();
        }

        return sSingleton;
    }
}

DCL(Double Check Lock)单例模式

/**
 * 作者:jtl
 * 日期:Created in 2019/1/25 16:16
 * 描述:DCL(Double Check Lock)单例模式
 * 优点:1.在懒汉式的基础上进行了判断,只有在第一次创建实例的时候才会,进行线程同步操作。资源利用率高
 * 缺点:1.高并发情况下会出现问题
 *      2.JDK1.5之前会出现问题。由于Java编译器允许处理器乱序执行,JDK之前JMM中Cache寄存器到主内存回写顺序的规定,可能1-2-3,也可能1-3-2,所以可能JDK1.5之前出现问题
 *      (1)给DclSingleton分配内存
 *      (2)调用DclSingleton()的构造函数,初始化成员字段;
 *      (3)将mSingleton指向分配的内存空间(此时mSingleton不为null)
 */

public class DclSingleton {
    private static DclSingleton mSingleton=null;
    private DclSingleton(){}

    public static DclSingleton getInstance(){
        if (mSingleton==null){
            synchronized (DclSingleton.class){
                if (mSingleton==null){
                    mSingleton=new DclSingleton();
                }
            }
        }

        return mSingleton;
    }
}

静态内部类单例模式

/**
 * 作者:jtl
 * 日期:Created in 2019/1/25 16:14
 * 描述:静态内部类单例模式
 * 优点:1.保证了线程安全问题,也能保证单例的唯一性(推荐)
 * 缺点:
 */

public class StaticSingleton {
    private StaticSingleton(){}

    private static StaticSingleton getInstance(){
        return StaticSingletonHolder.sSingleton;
    }

    private static class StaticSingletonHolder{
        private static final StaticSingleton sSingleton=new StaticSingleton();
    }
}

4.后续

上面例举了几种常见的单例模式,其中本人最为常用的是静态内部类单例模式。当然这四种并不是所有的单例模式,还有枚举单例模式,以及使用Map容器实现的单例模式。如果是想直接找一个单例模式使用的话,那就直接复制代码就好。如果想知道他们的优缺点的话,就可以看下注释。
还是那句话风里雨里在这里等你,您的一个赞或者收藏就是我写下去的动力,希望大家共同进步。如有错误请及时提出我也好改正。

相关文章

  • 观察者模式,今天你用了嘛

    连载文章 1. 单例模式,今天你用了嘛 2. Builder模式,今天你用了嘛 3. 观察者模式,今天你用了嘛 1...

  • 单例模式,今天你用了嘛

    1.前言 提起设计模式,可能大家有些人会感觉陌生,有些人会觉得经常使用。其实说到设计模式,不用感到陌生与害怕,其实...

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

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

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

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • 设计模式——单例模式

    单例模式 单例模式,顾名思义,就是我们的代码中只实例化出一个对象,就是单例模式,有的人说,为什么用单例模式啊,这个...

  • 【设计模式】单例模式

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

  • Android设计模式总结

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

  • 2.架构设计(单例模式设计)

    1.设计模式分为三个类 创建型 结构型 行为型 2.创建型:单例模式 为什么用单例模式?如果你看到这个问题,你怎么...

网友评论

    本文标题:单例模式,今天你用了嘛

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