文章目录

  • 单例模式
    • 单例模式是什么?
  • 饿汉单例模式
    • 饿汉单例是什么?
    • 实现步骤
    • 代码实现
  • 懒汉单例模式
    • 饿汉单例是什么?
    • 实现步骤
    • 代码实现
    • 懒汉单例线程安全问题
      • 解决方案
  • 总结

单例模式

单例模式是什么?

保证系统中应用该模式的类只有一个实例,即该类只能创建一个对象。

饿汉单例模式

饿汉单例是什么?

在用类创建对象时,对象已经提前创建好
优点:适用于单例对象较少的情况
缺点:所有对象类加载的时候就实例化,如果有很多单例对象存在,初始化时就会导致大量的内存浪费

实现步骤

  1. 定义一个类,把构造器私有
  2. 定义静态变量储存对象

代码实现

(通过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为同一对象


懒汉单例模式

饿汉单例是什么?

在需要对象的时候才去创建对象

实现步骤

  1. 定义类,私有化构造器
  2. 定义一个静态变量存储一个对象
  3. 提供返回对象的方法

代码实现

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. 单例模式饿汉模式与懒汉模式

    目录 1.什么是单例模式 2.为什么需要单例模式? 3.如何实现单例模式 3.1饿汉方式 3.2懒汉模式 1.什么是单例模式 单例模式是一种设计模式,单例模式能保证某个类在程序中只存在唯一一份实例, ...

  2. 单例模式——饿汉模式和懒汉模式

    目录

  3. 【设计模式】之单例模式中的饿汉模式和懒汉模式

    本文内容:什么是单例模式,单例的作用,饿汉模式,懒汉模式的安全与非安全的实现,饿汉模式与懒汉模式的区别. 什么是单例模式? 单例模式:保证一个类,仅有一个实例.提供一个访问它的全局访问点. 单例的作用 ...

  4. 单例模式 (饿汉、懒汉)

    单例模式 定义 单例模式的实现 饿汉模式 懒汉模式 线程安全问题分析: 如何解决线程安全问题?? 关键点总结 定义 单例模式,是一种常见的"设计模式" 设计模式: 设计模式是一套经 ...

  5. java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解

    目录 一.单例模式 二.饿汉模式和懒汉模式 1.饿汉模式,线程安全 2.懒汉模式 懒汉模式1,线程不安全(不常用) 懒汉模式2,线程安全(不常用) 懒汉模式3,线程安全,双重校验(不常用) 懒汉模式4 ...

  6. 单例模式(饿汉实现、懒汉实现)

    目录 (MS) 1. 饿汉实现 2.  懒汉模式 ① 单线程版本 ② 线程安全版 ③ 线程安全改进版⼀ 以上存在线程安全问题. ④ 线程安全改进版⼆ 以上存在线程安全问题,对象创建需要三步: ⑤ 线程 ...

  7. 单例模式——饿汉模式懒汉模式

    目录 一.什么是单例模式? 二.单例模式的应用场景 三.两种典型的方式实现单例模式 1.饿汉模式 2.懒汉模式 3.理解懒汉模式和饿汉模式 四.单例模式和线程的关系 1.饿汉模式是否线程安全? 2.懒 ...

  8. 单例模式的具体实现(包含饿汉模式和懒汉模式)

    什么是单例模式? 确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 首先要建立这个实例: class Factory{public string Name { get; set; }p ...

  9. Java中单例模式----饿汉式(HungrySingLeton)和懒汉式(LazySingLeton)

    一. 单例模式概述 单例模式(Singleton),也叫单子模式,是一种常用的设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候,整个系统只需要拥有一个的全局对象,这样有利于我 ...

  10. Singleton模式(单例模式) 饿汉式和懒汉式

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...

最新文章

  1. 400名微软员工主动曝光薪资:28万元到228万元不等!
  2. 技术人生:我喜欢年纪不断变大
  3. 图灵测试70载,回顾对话机器人的经典实践和最新进展
  4. JavaScript高级之ECMASript 7、8 、9 、10 新特性
  5. “章子欣父亲”账号发文造假实锤 百度新闻负责人:是我的锅
  6. JavaScript自定义事件
  7. mysql索引的方法_mysql索引类型和索引方法
  8. 读书笔记-集体智慧编程
  9. 通过CuteFTP用VBScript使用SFTP,实现Win与Linux的文件传输
  10. 如何在matlab中打开图片
  11. 基于P2P的n2n部署测试方法
  12. 苹果计算机开机进入安全模式,苹果电脑开机步骤
  13. wordpress瀑布流图片主题PhotoBroad模板V2.0
  14. 从反人工智能到反无人机,谁在左右科技的进步?
  15. 90后,第一批接棒白酒的“年轻人”
  16. 跑深度模型的显卡_GPU必知必会 | 哪款显卡配得上我的炼丹炉
  17. Activiti bpmn流程图设计工具 分享
  18. 得移动互联网者得天下
  19. iOS - 一个工程多个target引入CocoaPods的方式
  20. html中,将字符串对象数组转成对象数组

热门文章

  1. chatgpt赋能Python-python_hanning
  2. GaussDB高斯数据库(SQL语法分类)
  3. Am335x 平台上GSM 3G/4G modem的一些硬件和软件的杂事
  4. 工具 | Windows 功能猎手 (WFH)
  5. An infrared and visible image fusion algorithm based on ResNet‑152
  6. DeforGAN:用GAN实现星际争霸开全图外挂!
  7. windows下使用命令行运行PHP
  8. PDF如何在线转换成PPT呢?
  9. zhaowei -列表知识问答(王者农药)
  10. CK-FR08-E01与恩基士PLC配置指南