zl程序教程

您现在的位置是:首页 >  其他

当前栏目

static应用之 单例设计模式(饿汉单例&懒汉单例)

amp应用设计模式 单例 static
2023-09-11 14:22:57 时间

目录

前言

1、饿汉单例设计模式

步骤

2、懒汉单例设计模式

步骤

总结


前言

本章我们来学习单例模式中的饿汉单例懒汉单例,那么什么是单例模式呢?

应用该模式的这个类永远只有一个实列,即一个类只能创建一个对象

例如电脑上的任务管理器对象只需要一个就能解决问题,可以节省内存空间


1、饿汉单例设计模式

步骤

先定义一个类,把构造器私有

如下图,先来看一下没有把构造器私有化的SingleInstance类,此时Test类中可以随意创建多个SingleInstance的实例化。

 

在SingleInstance类中用private修饰无参构造器,此时左边new方法报错了。

我们在右边创建一个静态变量来存储对象,变量名为instance,变量类型为SingleInstance,往里面放入new SingleInstance();也就是SingleInstance对象的实例化。等于是Test1获取对象前,我们提前给它创建一个,并且定义为static,所以在左边main方法中无论提取多少次instance,输出的地址值都是一样的,也就是s1、s2、s3指向的都是同一个对象,这就是饿汉单例

 

2、懒汉单例设计模式

步骤

和前面的饿汉单例不同的是,饿汉是提前创建好一个对象,而懒汉是在需要的时候再去创建

相同的是都要将构造器私有化(因为都是单例模式)和 定义一个静态变量来存储

 

如下图,要注意的是在懒汉单例模式中我们创建一个静态变量时先不往里面放入对象,而是通过get Instance往里面放入对象,因此最好将它私有化,避免main方法中获取对象时输入提示instance2

 再来输出一下,可以看见地址值还是一样,懒汉单例模式完成

 


总结

单例模式对外只能产生一个对象,饿汉模式是提前创建好这个对象,而懒汉模式是你用的时候我再给你创建,那么饿汉和懒汉更好呢,从内存角度懒汉用的时候才创建,更节省内存;从速度的角度,饿汉提前创建好了,获取对象的时候速度会更快。