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

相关推荐
汤姆yu几秒前
基于SpringBoot的动漫周边商场系统的设计与开发
java·spring boot·后端
皮皮林5514 分钟前
快速解决 Maven 版本冲突指南 !
java·maven
灰小猿16 分钟前
Spring前后端分离项目时间格式转换问题全局配置解决
java·前端·后端·spring·spring cloud
会跑的兔子19 分钟前
Android 16 Kotlin协程 第一部分
android·开发语言·kotlin
Js_cold33 分钟前
Verilog函数function
开发语言·fpga开发·verilog
我是苏苏36 分钟前
C#基础:如何从现有类库复制一个新的类库,并且加入解决方案
开发语言·c#
算法与编程之美40 分钟前
理解Java finalize函数
java·开发语言·jvm·算法
怕什么真理无穷1 小时前
C++面试4-线程同步
java·c++·面试
lkbhua莱克瓦241 小时前
Java基础——常用算法5
java·开发语言·笔记·github
cs麦子1 小时前
C语言--函数(function)
c语言·开发语言