三要素
- 私有构造函数
- 静态私有成员变量(instance)
- 静态公有方法(GetInstance)
使用场景
- 在一个系统要求一个类只有一个实例时才应当使用单例模式。
- 反过来,如果一个类可以有几个实例共存,就不要使用单例模式。
本质:控制实例数目
单例模式分为两类
- 懒汉式单例模式(时间换空间)在使用实例时 在去创建实例
private static Singleton singleton;
- 饿汉式单例模式(空间换时间)在类加载时 就已经创建好了实例
private static Singleton singleton =new Singleton();
单例模式的特点
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其它对象提供这一实例。
代码如下
单例类:
public class Singleton {
private static Singleton instance;
//private static Singleton instance=new Singleton();
private Singleton() {}
public static Singleton GetInstance() {
if(instance==null) {
instance=new Singleton();
}
return instance;
}
}
客户端:
public class Main {
public static void main(String[] args) {
Singleton singleton1=Singleton.GetInstance();
Singleton singleton2=Singleton.GetInstance();
if(singleton1==singleton2) {
System.out.println("实例相同");
}
}
}