static应用之 单例设计模式(饿汉单例&懒汉单例)
目录
前言
本章我们来学习单例模式中的饿汉单例和懒汉单例,那么什么是单例模式呢?
应用该模式的这个类永远只有一个实列,即一个类只能创建一个对象
例如电脑上的任务管理器对象只需要一个就能解决问题,可以节省内存空间
1、饿汉单例设计模式
步骤
先定义一个类,把构造器私有
如下图,先来看一下没有把构造器私有化的SingleInstance类,此时Test类中可以随意创建多个SingleInstance的实例化。
在SingleInstance类中用private修饰无参构造器,此时左边new方法报错了。
我们在右边创建一个静态变量来存储对象,变量名为instance,变量类型为SingleInstance,往里面放入new SingleInstance();也就是SingleInstance对象的实例化。等于是Test1获取对象前,我们提前给它创建一个,并且定义为static,所以在左边main方法中无论提取多少次instance,输出的地址值都是一样的,也就是s1、s2、s3指向的都是同一个对象,这就是饿汉单例
2、懒汉单例设计模式
步骤
和前面的饿汉单例不同的是,饿汉是提前创建好一个对象,而懒汉是在需要的时候再去创建
相同的是都要将构造器私有化(因为都是单例模式)和 定义一个静态变量来存储
如下图,要注意的是在懒汉单例模式中我们创建一个静态变量时先不往里面放入对象,而是通过get Instance往里面放入对象,因此最好将它私有化,避免main方法中获取对象时输入提示instance2
再来输出一下,可以看见地址值还是一样,懒汉单例模式完成
总结
单例模式对外只能产生一个对象,饿汉模式是提前创建好这个对象,而懒汉模式是你用的时候我再给你创建,那么饿汉和懒汉更好呢,从内存角度懒汉用的时候才创建,更节省内存;从速度的角度,饿汉提前创建好了,获取对象的时候速度会更快。
相关文章
- PHP中类似$a && $b = $c 语法的用法和实例
- JavaWeb_(SpringMVC框架)测试SpringMVC&Spring&MyBatis三大整合
- [Linux] Add new sudo user & assign folder owner
- 栈和队列的高级应用--双端队列&滑动窗口
- Servlet请求参数编码处理(POST & GET)
- [root@master mysql]# mysql -uroot -pjsb ERROR 2002 (HY000): Can't connect to local MySQL server thro
- [AWS - DA] Step function & AppSync
- [Bash] Rerun Bash Commands with History Expansions (!! & !$)
- [ES6] 21. ESNext, ES6-Shim & Node
- [ES6] 14. Generator -- 1. yield & next()
- Eclipse & Visual Studio
- Linux 任务控制(bg job fg nohup &)
- JS实现简单的运行代码 & 侧边广告
- WCF 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。
- 华为OD机试 - 农场施肥(Java & JS & Python)
- 华为OD机试 - 新员工座位(Java & JS & Python)
- 华为OD机试 - 高矮个子排队(Java & JS & Python)
- element-ui侧边栏实现路由跳转:重点是:default-active和router才能正常跳转&默认展开侧边栏:default-openeds
- VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略
- Python语言学习:Python语言学习之迭代/递归/OS输入输出/错误&异常处理的简介、案例应用之详细攻略
- DataScience&ML:金融科技领域之风控的简介、类别、应用流程(定义目标变量→特征构建思路等)、案例集锦之详细攻略
- High&NewTech:【2019WAIC世界人工智能大会】上海正式开幕——现场精彩时刻
- Python语言学习:Python语言学习之容器(列表&元组&字典&集合)简介、特点/意义/经验总结及容器魔法方法(定义可变&不可变容器的协议)的简介、案例应用之详细攻略
- Python语言学习:Python语言学习之函数(定义&调用函数/常用内置函数如filter&map/内嵌函数/闭包/匿名函数如lambda&map)的简介、案例应用之详细攻略
- 阿里规约《线程资源必须通过线程池提供,不允许在应用中自行显式创建线程》&Java 线程池和多线程编程 ——线程池理解与创建
- 【ChatGPT】全网首发第一本全面介绍 ChatGPT 的书:《 ChatGPT 和人工智能革命 》/ 作者:禅与计算机程序设计艺术 & ChatGPT
- 从单体架构到微服务架构&最佳实践: Monolithic to Microservices Architecture
- vs2013 IntelliSense: "const char *" 类型的实參与 "LPCWSTR" 类型的形參不兼容
- 岭回归&Lasso回归
- DataScience&ML:金融科技之风控领域的CreditRisk+模型(信用风险度量模型)的简介、案例应用(代码实现)之详细攻略
- MySQL学习10:视图&事务&索引