单例模式分为两类
- 懒汉式单例模式(时间换空间)在使用实例时 在去创建实例
private static Singleton singleton; - 饿汉式单例模式(空间换时间)在类加载时 就已经创建好了实例
private static Singleton singleton = new Singleton();
UML
单例模式类
public class Singleton {
private static Singleton singleton;
private String name;
private Singleton(String name) {
this.name = name;
}
private Singleton() {
}
public static Singleton getInstance() {
if (singleton != null) {
return singleton;
} else {
singleton = new Singleton();
return singleton;
}
}
public static Singleton getInstance(String name) {
if (singleton != null) {
return singleton;
} else {
singleton = new Singleton(name);
return singleton;
}
}
}
测试类
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println(singleton);
Singleton singleton1 = Singleton.getInstance();
System.out.println(singleton1);
}
}
运行结果
从结果中可以看出,使用单例模式生成的两个对象为同一个对象
但是这种生成单例的方式对于使用了多线程的程序来说,是有可能生成多个实例的,比如:
对于多线程可以采用加锁的方式解决问题,请看下一篇文章。