当前位置: 首页 > news >正文

【Java学习笔记】单例设计模式

单例设计模式


单例模式介绍

单例模式的实现方法

单例模式的经典案例

javaSE 标准类中,java.lang.Runtime就是经典单例模式


一、饿汉式

解释:只要类加载,无论是否使用该类的实例对象,都会在类中创建对象实例

形象理解:很饿,饥渴难耐,无论是否使用该对象,都会创建

代码示例

package pattern.sigal;public class main {public static void main(String[] args) {girlfriend instance = girlfriend.getinstance();System.out.println(instance);}
}class girlfriend{private String name;/*单例模式实现三步走(1)类的内部创建对象(2)构造器私有化--->==防止直接`new`==(3)向外暴露一个静态的公共方法:用于返回对象(getinstance)*/// 使用静态方法创建对象(gf是一个静态变量)private static girlfriend gf = new girlfriend("女朋友");// 构造器私有化private girlfriend(String name) {System.out.println("构造器被调用");this.name = name;}// 编写返回对象的方法(静态方法)public static girlfriend getinstance(){return gf;}// 重写 toString 方法,输出对象的属性@Overridepublic String toString() {return "girlfriend{" +"name='" + name + '\'' +'}';}
}// 输出结果
构造器被调用
girlfriend{name='女朋友'}

二、懒汉式

解释:只有在对象被使用时才会创建

形象理解:很懒,有需求了才做

代码示例

package pattern.lazy;public class main {public static void main(String[] args) {Cat cat = Cat.getInstance();System.out.println(cat);Cat cat1 = Cat.getInstance();System.out.println(cat1);System.out.println(cat == cat1); // 结果为 true,说明只会创建一个cat对象}
}class Cat {private String name;private static Cat cat; // 使用对象时才会创建,先声明private Cat(String name) {System.out.println("构造器被调用");this.name = name;}public static Cat getInstance() {if (cat == null) {cat = new Cat("小猫");}return cat;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +'}';}
}// 输出结果
构造器被调用
Cat{name='小猫'}
Cat{name='小猫'}
true

饿汉式懒汉式对比

http://www.xdnf.cn/news/654481.html

相关文章:

  • C++23 std::start_lifetime_as:用于隐式生存期类型的显式生存期管理函数 (P2590R2)
  • Java网络编程中的I/O操作:从字节流到对象序列化
  • DJI上云API官方demo学习
  • JavaSE核心知识点04工具04-01(JDK21)
  • 【opencv】vs2019中配置opencv
  • 同一个核磁共振(MRI)检查中,不同序列的图像之间空间坐标定位如何实现
  • Redis | 缓存技术对后端的重要性
  • STM32之SPI——外部FLASH和RFID
  • 宫格导航--纯血鸿蒙组件库AUI
  • 树莓派超全系列教程文档--(47)如何使用内核补丁
  • QT中常用的类
  • Cesium 实战 26 - 自定义纹理材质 - 实际应用之飞线(抛物线)
  • 并发的产生及对应的解决方案之服务架构说明
  • 第1章第1节:安全运维基础思维与体系建设-安全运维的定义与核心目标
  • Ext系列文件系统
  • 分布式缓存:证明分布式系统的 CAP 理论
  • [闲谈]C语言的面向对象
  • 易境通WMS系统:赋能快消品海外仓高效管理
  • 完美解决Docker镜像无法拉取问题(转载)
  • 服务器的IP是什么东西?
  • uniapp-商城-69-shop(2-商品列表,点击商品展示,商品的详情, vuex的使用,rich-text使用)
  • ESP8266_AP机械手 第三篇Uniapp遥控器
  • ElasticSearch--DSL查询语句
  • 信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)
  • FreeRTOS 在物联网传感器节点的应用:低功耗实时数据采集与传输方案
  • 综合实现案例 LVS keepalived mysql 等
  • 《基于Keepalived+LVS+Web+NFS的高可用集群搭建》
  • MPI实现大数据Ring Broadcast逻辑
  • 关于 SSE(Server-Sent Events)过程的简要解剖
  • 07-后端Web实战(部门管理)