什么是单例模式

  • 最简单的设计模式之一
  • 单个实例/单个对象,最终只会产生一个对象

实现单例模式的方式

懒汉式

  • 将构造方法私有化 ->设置为private,不对外开放
  • 在类的内部去创建对象
  • 添加一个对外的方法,通过这个方法去创建实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class User{
private static User user;

//将构造函数私有化,这样就使得外面new对象的时候无法成功
private User(){}

//提供创建对象的方法
//synchronized:锁,用来保证线程安全,但是会造成执行效率比较低
public synchronized static User getUser(){
//如果已经创建了对象,则之间返回,否则创建新对象
if(this.user == null){
this.user = new User();
}
return this.user;
}
}

饿汉式

  • 及时加载,无论对象是否使用,都会创建一个
  • 构造方法私有化
  • 直接创建对象
  • 对外提供方法,提供唯一对象
1
2
3
4
5
6
7
8
9
10
11
class User{
private static User user = new User();

//将构造函数私有化,这样就使得外面new对象的时候无法成功
private User(){}

//提供创建对象的方法
public static User getUser(){
return this.user;
}
}

优点是保证线程安全,缺陷是会造成资源的浪费,因为无论用不用该对象,该对象都会被创建

暂时学了这么多,等待后续更新