[Java基础揉碎]单例模式

目录

什么是设计模式

什么是单例模式

饿汉式与懒汉式

饿汉式vs懒汉式

懒汉式存在线程安全问题


什么是设计模式

1.静态方法和属性的经典使用

2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索

什么是单例模式

1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

2.单例模式有两种方式:

1)饿汉式

2)懒汉式

饿汉式与懒汉式

具体步骤:

1)构造器私有化

2)类的内部创建对象

3)向外暴露一个静态的公共方法。getlnstance

  1. 代码实现 class

*** 饿汉式实现代码:

// 为了能够在静态方法中返回instance, 所以属性必须要static修饰

// 之所以叫饿汉式是因为一旦这个类被加载对象就创建出来了

*** 懒汉式实现代码:

// 懒汉式就是在属性不直接new对象, 在静态方法当中判断为null时再去创建对象, 这样在这个类信息被加载的时候不会立马创建对象, 而是在调用这个静态方法的时候被创建, 而且后续调用这个方法因为上一次调用已经创建了对象在null判断的条件下直接返回第一次创建的对象, 实现单例

饿汉式vs懒汉式

1.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例, 而懒汉式是在使用时才创建

2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题

3.饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题

4.在我们javaSE标准类中, java.lang.Runtime就是经典的单例模式

懒汉式存在线程安全问题

假设此时存在三个线程同时去掉getInstance方法, 同时都进入到了if判断, 当第一个进去还在new Cat的时候, 还在创建进行中没有创建好, 第二个线程进去了也在new Cat ,第三个同理, 此时就会创建多个对象, 单例模式就被破坏了, 所以说存在线程安全问题

相关推荐
时艰.几秒前
分布式 ID 服务实战
java·分布式
Never_Satisfied1 分钟前
在JavaScript / HTML中,触发某个对象的click事件
开发语言·javascript·html
lly2024062 分钟前
ionic 下拉刷新:实现与优化指南
开发语言
米羊1213 分钟前
Spring 框架漏洞
开发语言·python
键盘鼓手苏苏4 分钟前
Flutter for OpenHarmony:cider 自动化版本管理与变更日志生成器(发布流程标准化的瑞士军刀) 深度解析与鸿蒙适配指南
运维·开发语言·flutter·华为·rust·自动化·harmonyos
七夜zippoe4 分钟前
分布式系统弹性设计实战:Hystrix与Sentinel熔断降级深度解析
java·hystrix·sentinel·aws·分布式系统
IT 行者7 分钟前
ZeroClaw:Rust 驱动的下一代 AI Agent 基础设施
开发语言·人工智能·rust
IT 行者7 分钟前
AI Agent 平台横评:ZeroClaw vs OpenClaw vs Nanobot
开发语言·人工智能·rust
BigNiu11 分钟前
rust里mut 和遮蔽之间的区别
开发语言·rust
许同12 分钟前
JS-WPS 自动化办公(5)多Sheet整合
开发语言·前端·javascript