前言
单例相信各位都不陌生,从学习java开始就会经常接触到这个概念,首先先来回忆一下什么是单例:
单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。
————来自百度百科。
简单来说,就是让你的对象全局只有一个,而且还是你想要别人获取到的那一个。
以下代码测试使用环境:
java版本:1.8
编译器:idea、eclipse
预热一下
那么怎么做一个单例呢?先抛开反射这种情况不说,简单的来一个小小的单例demo:
/** 一个简单的单例demo */
public class Singleton {
/** 唯一的单例 */
private static volatile Singleton singleton = null;
/** 构造私有化 */
private Singleton(){
}
/** 获取实例的工厂方法 */
public static Singleton getSingleton(){
synchronized (Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
return singleton;
}
从上面的代码我们可以看到,
- 构造是私有的,外界无法直接通过
new
来创建一个新的对象实例 - 类内存在一个私有的、静态的、被
volatile
修饰的字段,作为唯一单例对象。 - 存在一个工厂方法,当唯一单例对象不存在则创建一个并保存,如果有则直接返回。同时还使用
synchronized
关键字来保证线程的安全。