1.单例设计模式
只能创建一个类的实例化对象,不能创建多个对象
为什么用?
开发中很多类的对象我们只需要一个,例如windos 回收站、虚拟机对象 ,任务管理器对象等。
对象越多越占内存,单例可以节约内存,提高性能!
2.如何实现单例?
(1)饿汉单例设计模式
通过类获取单例的时候,对象已经做好了
实现步骤:
1、定义一个单例类。
2、类的构造器私有化,对外隐藏,只能在本类中调用。
3、定义一个静态成员变量用于存储一个创建好的对象。
4、定义一个getter方法返回单例对象。
饿汉单例代码实现:
class SingelInstance01 {
/*
* 饿汉单例设计模式
*/
// 2. 定义静态变量与类一起加载,用于存储创建好的一个对象
private final static SingelInstance01 ins = new SingelInstance01();
// 1. 构造器私有化,只能在本类调用。
private SingelInstance01() {
}
// 3. 提供一个getter方法返回单例类的实例化对象
public static SingelInstance01 getInstance() {
// ins =new SingelInstance01();
return ins;
}
}
测试
public class SingleInstanceDemo02 {
public static void main(String[] args) {
SingelInstance02 ins01 = SingelInstance02.getInstance();
SingelInstance02 ins02 = SingelInstance02.getInstance();
System.out.println(ins01 == ins02); //true
}
}
(2)懒汉单例设计模式(更节约性能)
实现步骤:
1、定义一个单例类。
2、类的构造器私有化,只能在本类中调用。
3、定义一个静态成员变量用于存储一个对象。
4、定义一个方法返回单例对象,判断对象不存在才创建一次,存在直接返回。
懒汉单例代码实现:
class SingelInstance02 {
/*
* 懒汉单例设计模式
*/
// 2. 定义一个静态成员变量用于 存储一个对象(不创建而是需要的时候再创建)
private static SingelInstance02 ins; //与类一起加载
// 1. 构造器私有化
private SingelInstance02() {
}
// 3.通过getter方法返回一个对象,不存在对象才创建一个返回。
public static SingelInstance02 getInstance() {
if (ins == null) { //如果空
ins = new SingelInstance02(); //创建一个对象
}
return ins; //如果非空直接返回创建好的对象
}
测试:
public class SingleInstanceDemo02 {
public static void main(String[] args) {
SingelInstance02 ins01 = SingelInstance02.getInstance();
SingelInstance02 ins02 = SingelInstance02.getInstance();
System.out.println(ins01 == ins02); //true
}
}