• 单例模式小试


    《研磨设计模式》中的定义:保证一个类仅有一个实例,并提供它的一个全局访问点。

    而单例模式的本质便是——控制实例数目。

    一、介绍

    1、单例模式是比较简单的模式,传统的有懒汉式和饿汉式两种。

    懒汉式如下:

    package singleton;
    
    public class Singleton1 {
    
        private static Singleton1 instance = null;
    
        private Singleton1() {
        }
    
        public static Singleton1 getInstance() {
            if (instance == null) {
                instance = new Singleton1();
            }
            return instance;
        }
    }

    顾名思义,懒汉式便是类加载时并不创建该单例对象实例,等到类使用时才去创建。

    2、饿汉式如下:

    package singleton;
    
    public class Singleton2 {
    
        private static Singleton2 instance = new Singleton2();
    
        private Singleton2() {
        }
    
        public static Singleton2 getInstance() {
            return instance;
        }
    }

    饿汉式便是类加载时便创建实例了,故每次使用时无需创建。

    懒汉式、饿汉式就是Spring中的BeanFactory和ApplicationContext在处理单例类时的区别。

    3、由于懒汉式单例模式并非线程安全的,想要保证线程安全,除了在创建实例的方法上加Synchronized之外,最简单的当然是,在创建对象的时候,每一步多进行一次判断,判断该对象是否已经存在。

    二、优雅实现

    然而,《研磨设计模式》中介绍了Java中一种一优雅的,能保证线程安全的懒汉式单例模式,叫做Lazy initialization holder class模式。如下:

    package singleton;
    
    public class Singleton3 {
    
        private Singleton3() {
        }
    
        private static class SingletonHolder {
            private static Singleton3 instance = new Singleton3();
        }
    
        public static Singleton3 getInstance() {
            return SingletonHolder.instance;
        }
    }

    类的静态内部类,实际上是一个顶层类,可以不依赖外围类的实例而存在,就像是类的一个静态成员变量。只有在使用时,其内部的变量才会被实例化。Lazy initialization holder class模式便是利用JVM自身的特性保证了线程安全。

    /**
    *   ————————如果觉得本博文还行,别忘了推荐一下哦,谢谢!
    *   作者:钱书康
    *   欢迎转载,请保留此段声明。
    *   出处:http://www.cnblogs.com/zrtqsk/
    */
  • 相关阅读:
    SpringBoot+SpringCloud+vue+Element开发项目——集成Druid数据源
    SpringBoot+SpringCloud+vue+Element开发项目——集成MyBatis框架
    c语言double类型数据四舍五入
    陀螺仪、加速计、磁力计等传感器汇总 (转)
    sudo和man的tab自动补全
    linux系统资源网站
    gstreamer
    version `GLIBC_2.14' not found 解决方法.
    项目框架设计模式(转)
    Linux音频编程指南(转)
  • 原文地址:https://www.cnblogs.com/zrtqsk/p/3618616.html
Copyright © 2020-2023  润新知