单例模式(饿汉单例模式and懒汉单例模式)
文章目录
- 单例模式
- 单例模式是什么?
- 饿汉单例模式
- 饿汉单例是什么?
- 实现步骤
- 代码实现
- 懒汉单例模式
- 饿汉单例是什么?
- 实现步骤
- 代码实现
- 懒汉单例线程安全问题
- 解决方案
- 总结
单例模式
单例模式是什么?
保证系统中应用该模式的类只有一个实例,即该类只能创建一个对象。
饿汉单例模式
饿汉单例是什么?
在用类创建对象时,对象已经提前创建好
优点:适用于单例对象较少的情况
缺点:所有对象类加载的时候就实例化,如果有很多单例对象存在,初始化时就会导致大量的内存浪费
实现步骤
- 定义一个类,把构造器私有
- 定义静态变量储存对象
代码实现
类(通过HungryManModel访问该类的instance对象)
package hk;/*** 饿汉单例模式*/
public class HungryManModel {/*** public 对方可以访问* 对象只能是一个,所以用static静态成员变量*/public static HungryManModel instance=new HungryManModel();/***私有化构造器,不是私有的化,可以创建多个对象*一定要写出来并定义为private,因为有默认的*/private HungryManModel(){}
}
Test类:
package hk;public class Test {public static void main(String[] args) {//调用静态变量, 类名.变量名HungryManModel h1=HungryManModel.instance;HungryManModel h2=HungryManModel.instance;System.out.println(h1);System.out.println(h2);}
}
输出结果:
由结果可知h1和h2为同一对象
懒汉单例模式
饿汉单例是什么?
在需要对象的时候才去创建对象
实现步骤
- 定义类,私有化构造器
- 定义一个静态变量存储一个对象
- 提供返回对象的方法
代码实现
类
package hk;public class LazyMode {/*2. 不能new,否则就变成了饿汉模式最好别定义为public,对方如果第一次调用为LazyMode h2=LazyMode.instance; 就会变为null*/private static LazyMode instance;//1.private LazyMode(){}//提供方法,对外返回一个单例对象public static LazyMode getInstance(){/*3. 不能直接这样写,否则每调一次这个方法,就会产生一个新对象instance=new LazyMode();return instance;
*/if (instance == null){instance=new LazyMode();}return instance;}
}
Test类:
package hk;public class Test {public static void main(String[] args) {LazyMode h1=LazyMode.getInstance();LazyMode h2=LazyMode.getInstance();System.out.println(h1);System.out.println(h2);}
}
输出结果:
由结果可知h1和h2为同一对象
懒汉单例线程安全问题
懒汉单例模式是线程不安全,当调用方法时,首先要经过if判断,在多线程场景下,就可能存在多个线程同时进入if判断,此时对象还未创建,那么就会多个线程都去创建对象,这样单例模式就被破坏了。
解决方案
具体可查看这篇文章
懒汉单例模式解决线程安全问题
总结
从内存角度看,懒汉模式要比饿汉好一些,当调用这个类的其它功能,不需要这个对象时,懒汉模式就不必提前创建对象,节省内存。饿汉模式即使不需要对象,但此时也会创建对象(与类一起加载)。
单例模式(饿汉单例模式and懒汉单例模式)相关推荐
- 单例模式饿汉模式与懒汉模式
目录 1.什么是单例模式 2.为什么需要单例模式? 3.如何实现单例模式 3.1饿汉方式 3.2懒汉模式 1.什么是单例模式 单例模式是一种设计模式,单例模式能保证某个类在程序中只存在唯一一份实例, ...
- 单例模式——饿汉模式和懒汉模式
目录
- 【设计模式】之单例模式中的饿汉模式和懒汉模式
本文内容:什么是单例模式,单例的作用,饿汉模式,懒汉模式的安全与非安全的实现,饿汉模式与懒汉模式的区别. 什么是单例模式? 单例模式:保证一个类,仅有一个实例.提供一个访问它的全局访问点. 单例的作用 ...
- 单例模式 (饿汉、懒汉)
单例模式 定义 单例模式的实现 饿汉模式 懒汉模式 线程安全问题分析: 如何解决线程安全问题?? 关键点总结 定义 单例模式,是一种常见的"设计模式" 设计模式: 设计模式是一套经 ...
- java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解
目录 一.单例模式 二.饿汉模式和懒汉模式 1.饿汉模式,线程安全 2.懒汉模式 懒汉模式1,线程不安全(不常用) 懒汉模式2,线程安全(不常用) 懒汉模式3,线程安全,双重校验(不常用) 懒汉模式4 ...
- 单例模式(饿汉实现、懒汉实现)
目录 (MS) 1. 饿汉实现 2. 懒汉模式 ① 单线程版本 ② 线程安全版 ③ 线程安全改进版⼀ 以上存在线程安全问题. ④ 线程安全改进版⼆ 以上存在线程安全问题,对象创建需要三步: ⑤ 线程 ...
- 单例模式——饿汉模式懒汉模式
目录 一.什么是单例模式? 二.单例模式的应用场景 三.两种典型的方式实现单例模式 1.饿汉模式 2.懒汉模式 3.理解懒汉模式和饿汉模式 四.单例模式和线程的关系 1.饿汉模式是否线程安全? 2.懒 ...
- 单例模式的具体实现(包含饿汉模式和懒汉模式)
什么是单例模式? 确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 首先要建立这个实例: class Factory{public string Name { get; set; }p ...
- Java中单例模式----饿汉式(HungrySingLeton)和懒汉式(LazySingLeton)
一. 单例模式概述 单例模式(Singleton),也叫单子模式,是一种常用的设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候,整个系统只需要拥有一个的全局对象,这样有利于我 ...
- Singleton模式(单例模式) 饿汉式和懒汉式
目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...
最新文章
- 400名微软员工主动曝光薪资:28万元到228万元不等!
- 技术人生:我喜欢年纪不断变大
- 图灵测试70载,回顾对话机器人的经典实践和最新进展
- JavaScript高级之ECMASript 7、8 、9 、10 新特性
- “章子欣父亲”账号发文造假实锤 百度新闻负责人:是我的锅
- JavaScript自定义事件
- mysql索引的方法_mysql索引类型和索引方法
- 读书笔记-集体智慧编程
- 通过CuteFTP用VBScript使用SFTP,实现Win与Linux的文件传输
- 如何在matlab中打开图片
- 基于P2P的n2n部署测试方法
- 苹果计算机开机进入安全模式,苹果电脑开机步骤
- wordpress瀑布流图片主题PhotoBroad模板V2.0
- 从反人工智能到反无人机,谁在左右科技的进步?
- 90后,第一批接棒白酒的“年轻人”
- 跑深度模型的显卡_GPU必知必会 | 哪款显卡配得上我的炼丹炉
- Activiti bpmn流程图设计工具 分享
- 得移动互联网者得天下
- iOS - 一个工程多个target引入CocoaPods的方式
- html中,将字符串对象数组转成对象数组
热门文章
- chatgpt赋能Python-python_hanning
- GaussDB高斯数据库(SQL语法分类)
- Am335x 平台上GSM 3G/4G modem的一些硬件和软件的杂事
- 工具 | Windows 功能猎手 (WFH)
- An infrared and visible image fusion algorithm based on ResNet‑152
- DeforGAN:用GAN实现星际争霸开全图外挂!
- windows下使用命令行运行PHP
- PDF如何在线转换成PPT呢?
- zhaowei -列表知识问答(王者农药)
- CK-FR08-E01与恩基士PLC配置指南