单例模式的特点:
- 只能有一个实例;
- 必须自己创建这个实例;
- 其他对象可以调用这个实例;
通过实例创建的时间可以分为饿汉式单例和懒汉式单例;
饿汉式单例
类创建的同时便创建实例,即无论后面是否会使用这个实例,它都会在内存中占据一定空间,相应的,在第一次调用这个实例时性能会好一点;
public class Singleton{
// 必须自己创建自己的实例(饿汉式)
private static final Singleton singleton = new Singleton();
// 只能有一个实例,所以构造函数必须是私有的
private Singleton(){}
// 其他对象可以调用这个实例
public static Singleton getInstance(){
return singleton;
}
}
懒汉式单例
第一次调用时才会创建实例;如果是多线程,可能会导致线程安全问题,且第一次调用时性能会差一点;
public class Singleton{
// 必须自己创建自己的实例(懒汉式)
private static Singleton singleton = null;
// 只能有一个实例,所以构造函数必须是私有的
private Singleton(){}
// 其他对象可以调用这个实例
public static Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}