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

 

posted @ 2019-12-02 14:46  脆皮香蕉  阅读(137)  评论(0编辑  收藏  举报