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; } }