单例模式
特点:一个类只有一个实例
目的:
-
符合某些特定的业务需求,如:学校中只有一个校长
-
节约系统资源,如:Spring中的Bean默认是单例
实例步骤:
1. 把构造方法私有化
2. 定义静态的实例
3. 定义方法用于创建对象并返回实例
单例模式的分类
单例模式分为两种:
饿汉式
/**
* 饿汉式单例
*/
public class HungrySingleton {
//2. 定义静态的实例
private static HungrySingleton instance = new HungrySingleton();
//1. 私有化构造方法
private HungrySingleton(){
System.out.println("创建对象");
}
//3. 静态方法返回实例
public static HungrySingleton getInstance(){
return instance;
}
}
懒汉式
/**
* 懒汉式单例
*/
public class LazySingleton {
//2. 定义静态实例
private static LazySingleton instance = null;
//1. 私有构造方法
private LazySingleton(){
System.out.println("创建实例");
}
//3. 静态方法创建对象并返回
public static LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}
对比饿汉式和懒汉式:
1、饿汉式代码更加简洁
2、懒汉式更加节约内存(调用返回实例方式时才创建对象)
3、饿汉式没有线程安全问题