什么是单例?
单例的意思是一个类永远只存在一个对象, 不能创建多个对象。
为什么要用单例?
开发中有很多类的对象我们只需要一个, 例如虚拟机对象、任务管理器对象
对象越多越占内存,有些时候只需要一个对象 就可以实现业务,单例可以节约内存,提高性能。
如何实现单例?
饿汉单例设计模式:
通过类获取单例对象的时候,对象已经提前做好了
实现步骤:
- 定义一个单例类
- 把类的构造器私有
- 定义一个静态成员变量用于存储一个对象
(饿汉单例在返回对象的时候,对象要已经做好,所以这里直接创建出来) - 定义一个方法返回单例对象
public class SingleInstanceDemo1 {
public static void main(String[] args) {
SingleInstance01 s1 = SingleInstance01.getInstance();
SingleInstance01 s2 = SingleInstance01.getInstance();
System.out.println(s1 == s2);//true
}
}
//饿汉单例设计一个单例类
class SingleInstance01{
//2.定义一个静态成员变量存储一个对象
//饿汉单例需要提前把对象创建好
public static SingleInstance01 ins = new SingleInstance01();
//1.私有构造器,构造器只能在本类使用
private SingleInstance01(){}
//3.提供一个方法返回单例对象
public static SingleInstance01 getInstance(){
return ins;
}
}
懒汉单例设计模式:
通过类获取单例对象的时候发现没有对象才会去创建一个对象。
实现步骤:
- 定义一个单例类
- 把类的构造器私有
- 定义一个静态成员变量用于存储一个对象
( 懒汉单例不能直接创建对象,必须雷要的时候才创建) - 定义一个方法返回单例对象,判断对象不存在才创建一次, 存在直接返回
public class SingleInstanceDemo2 {
public static void main(String[] args) {
SingleInstance02 s1 = SingleInstance02.getInstance();
SingleInstance02 s2 = SingleInstance02.getInstance();
System.out.println(s1 == s2);//true
}
}
//懒汉单例设计一个单例类
class SingleInstance02{
//2.定义一个静态成员去存储对象
//不能直接创建对象,需要再创建
public static SingleInstance02 ins;
//1.构造器私有
private SingleInstance02(){};
//3.返回对象
public static SingleInstance02 getInstance(){
if (ins == null){
//1.第一次去对象。创建一个对象
ins = new SingleInstance02();
}
return ins;
}
}