[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 ,第三个同理, 此时就会创建多个对象, 单例模式就被破坏了, 所以说存在线程安全问题

相关推荐
LOVE️YOU1 分钟前
Python 类与对象的核心逻辑:从 self、cls 到点号、括号与链式调用
开发语言·python
顶点多余7 分钟前
C/C++常见面试题
开发语言·c++
(Charon)10 分钟前
【C++面试】右值引用与移动语义:std::move到底做了什么
开发语言·c++
TheITSea10 分钟前
JavaScript Web APIs
开发语言·前端·javascript
空心木偶☜14 分钟前
A2A2A(多智能体协作)
开发语言·python·ai·ai编程
Cc.Y16 分钟前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
\光辉岁月/18 分钟前
2.java变量
java·开发语言·变量
Wang's Blog21 分钟前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
专业程序开发源22 分钟前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
夏天的清晨34 分钟前
C++入门学习
开发语言·c++·学习