前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抽丝剥茧——单例设计模式

抽丝剥茧——单例设计模式

作者头像
石的三次方
发布2021-01-05 22:29:04
2170
发布2021-01-05 22:29:04
举报
文章被收录于专栏:石的三次方石的三次方

单例设计模式

兄弟们好,今天是最后一个设计模式了,也是我们最熟悉的单例设计模式,可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候,老师聊到一个「饿汉式和懒汉式」,我还纠结了半天,这名字起的很完美。接下来我们一起复习一下单例设计模式吧。

定义:该类的实例仅仅存在一个。单个实例对象——单例模式

我们直接上代码

1. 懒汉式
代码语言:javascript
复制
public class Single {
    private static final SingleDesgin singleDesgin = new SingleDesgin();

    private Single(){}

    public SingleDesgin newInstance(){
        return singleDesgin ;
    }
}
  • 直接在类加载的时候创建对象,由虚拟机保证该对象仅仅被创建一次。(「推荐使用」
2. 懒汉式
代码语言:javascript
复制
public class Single {
    private SingleDesgin singleDesgin ;

    private Single(){}
    
    public SingleDesgin newInstance(){
        if(singleDesgin == null){
            singleDesgin = new SingleDesgin();
        }
        return singleDesgin ;
    }
}
  • 在多线程情况下可能会出现多个对象被创建,线程不安全。(「不推荐使用」
3. 静态内部类
代码语言:javascript
复制
public class Single {

    private Single(){}

    public SingleDesgin newInstance(){
        return SingleBuild.singleDesgin;
    }

    private static class SingleBuild{
        static SingleDesgin singleDesgin = new SingleDesgin();
    }

}
  • 和懒汉式相同,由虚拟机保证对象线程安全。与之不同的是把类加载时机交给了开发者(「调用方法的时候」
4. DCL单例
代码语言:javascript
复制
public class Single {
    private volatile SingleDesgin singleDesgin ;

    public SingleDesgin newInstance(){
        if(singleDesgin == null){
            synchronized (Single.class){
                if(singleDesgin == null){
                    singleDesgin = new SingleDesgin();
                }
            }
        }
        return singleDesgin ;
    }

}
  • 双重加锁,保证多线程安全,通过volatile保证线程可见性和有序性。

关于volatile关键字可以参考我之前的文章,不过过几天我会发一篇完整讲述JMM模型的文章,其中讲到了volatile,可以「关注一波公众号」。(打个广告,哈哈哈)

5. 枚举实现
代码语言:javascript
复制
public enum Single {
    INSTANCE
}
  • 就这,就这。这个操作来自于Java创始人的写法,牛批
  • 优点:线程安全,肯定加载一次;防止序列化
  • 缺点:将一个类搞成了枚举,不容易区分

好啦,以上就是所有我认为比较典型的单例设计模式的类型了,至于说什么八种设计模式的写法,无非也就是加一个静态代码块等等操作,将一个操作分两步执行了,没什么新鲜的,上面五种比较典型,兄弟们可以尽情享用。设计模式要结束了。明天或者后天会发一篇文章做一个总结,并且计划一下接下来要做的事情,明天晚上团建,看晚上回来的时间吧。

好啦,兄弟们晚安呐。明天又是元气满满的一天呢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 石的三次方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单例设计模式
    • 1. 懒汉式
      • 2. 懒汉式
        • 3. 静态内部类
          • 4. DCL单例
            • 5. 枚举实现
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档