• 2.单例模式


    1.设计模式中首当其冲的就是单例模式,单例模式顾名思义就是全局只有一个实例,应用比较广泛,比如我们再spring中声明一个Bean默认就是单例的,再比如数据库连接池全局只有一个,自己定义的ID生成器,全局也只能有一个,某个特定任务的线程池也只有一个。单例模式有以下几个特点:

    (1)类的实例全局只有一个

    (2)实例必须由类自己创建

    (3)提供一个统一的入口获取实例

    2.单例模式的实现方式很多,有懒汉式,饿汉式等等。实现思路是构造方法都是私有的,不允许别人通过构造方法创建实例,在获取实例前判断实例是否存在,如果不存在则进行创建,但是这个创建必须保证只能执行,不管是否懒加载。另外还要考虑多线程的情况下使用单例。综上,我下面贴一下个人觉得最实用,最安全,最简单的两种实现方式。

    package com.java.dp.singleton;
    
    /**
     * @Author lizhilong
     * @create 2019/12/2 13:57
     * @desc 单例模式的特点:全局只有一个实例,实例必须由单例自己创造,提供一个入口获取实例
     */
    public class Singleton {
    
        private volatile static Singleton instance;
    
        private Singleton() {
    
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        return new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    package com.java.dp.singleton;
    
    /**
     * @Author lizhilong
     * @create 2019/12/2 14:30
     * @desc
     */
    public class Singleton2 {
    
        private Singleton2() {
    
        }
    
        private static class SingletonHolder {
            private static Singleton2 instance = new Singleton2();
        }
    
        public static Singleton2 getInstance() {
            return SingletonHolder.instance;
        }
    }
  • 相关阅读:
    zoj3430Detect the Virus(ac自动机)
    zoj3494BCD Code(ac自动机+数位dp)
    hdu3247Resource Archiver(ac自动机+spfa)
    hdu3341Lost's revenge(ac自动机+dp)
    hdu4511小明系列故事——女友的考验(ac自动机+最短路)
    hdu4758Walk Through Squares(ac自动机+dp)
    数论一
    母函数专题
    KMP专题
    3级算法题
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/11970517.html
Copyright © 2020-2023  润新知