单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,指一个类只有一个实例,且该类能自行创建这个实例的一种模式。
单例模式有 3 个特点:
- 单例类只有一个实例对象;
- 该单例对象必须由单例类自行创建;
- 单例类对外提供一个访问该单例的全局访问点。
通常有两种方式用来实现单例模式:==懒汉式、饿汉式==
懒汉式
懒汉式不在类加载的时候生成实例,只有当第一次调用 getlnstance 方法时才去创建这个单例。
//懒汉式
public class LazySingle {
private static LazySingle instance;
private LazySingle(){}
public static synchronized LazySingle getInstance(){
if (instance == null){
instance = new LazySingle();
}
return instance;
}
}
饿汉式
饿汉式中类一旦加载就创建一个单例,保证在调用 getInstance 方法之前单例已经存在了。
//饿汉式
public class HungrySingle {
private final static HungrySingle instance = new HungrySingle();
private HungrySingle(){}
public static HungrySingle getInstance(){
return instance;
}
}
测试
public class SingleMain {
public static void main(String[] args) {
LazySingle lazySingle1 = LazySingle.getInstance();
LazySingle lazySingle2 = LazySingle.getInstance();
System.out.println("懒汉式创建的第一个对象:" + lazySingle1);
System.out.println("懒汉式创建的第二个对象:" + lazySingle2);
System.out.println(lazySingle1 == lazySingle2);
HungrySingle hungrySingle1 = HungrySingle.getInstance();
HungrySingle hungrySingle2 = HungrySingle.getInstance();
System.out.println("饿汉式创建的第一个对象:" + hungrySingle1);
System.out.println("饿汉式创建的第二个对象:" + hungrySingle2);
System.out.println(hungrySingle1 == hungrySingle2);
}
}
可以看到,不管是懒汉式还是饿汉式多次创建的都是对象完全一样,这也就体现了单例模式只会创建一个实例的特点。