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


    单例设计模式

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

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

    我们直接上代码

    1. 懒汉式

    public class Single {
        private static final SingleDesgin singleDesgin = new SingleDesgin();
    
        private Single(){}
    
        public SingleDesgin newInstance(){
            return singleDesgin ;
        }
    }
    
    • 直接在类加载的时候创建对象,由虚拟机保证该对象仅仅被创建一次。(推荐使用

    2. 懒汉式

    public class Single {
        private SingleDesgin singleDesgin ;
    
        private Single(){}
        
        public SingleDesgin newInstance(){
            if(singleDesgin == null){
                singleDesgin = new SingleDesgin();
            }
            return singleDesgin ;
        }
    }
    
    • 在多线程情况下可能会出现多个对象被常见,线程不安全。(不推荐使用

    3. 静态内部类

    public class Single {
    
        private Single(){}
    
        public SingleDesgin newInstance(){
            return SingleBuild.singleDesgin;
        }
    
        private static class SingleBuild{
            static SingleDesgin singleDesgin = new SingleDesgin();
        }
    
    }
    
    • 和懒汉式相同,由虚拟机保证对象线程安全。与之不同的是把类加载时机交给了开发者(调用方法的时候

    4. DCL单例

    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. 枚举实现

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

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

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

  • 相关阅读:
    用户场景描述
    个人工作总结(第一阶段)
    个人进度报告
    《构建之法》阅读笔记05
    《构建之法》阅读笔记04
    《构建之法》阅读笔记03
    2020寒假学习(14)
    2020寒假学习(13)
    2020寒假学习(12)
    2020寒假学习(11)
  • 原文地址:https://www.cnblogs.com/onlyzuo/p/13906941.html
Copyright © 2020-2023  润新知