单例模式讲解

现在我们来学习单例模式,首先我们来看一下单例模式的定义和类型,他的定义是说,保证一个类仅有一个实例,

并提供一个全局访问的点,那这个定义还是非常简单的,我们来看一下他的类型是创建型

那单例模式既简单又复杂,尤其后面我们到coding的时候,会一起来演进咱们的单例模式,从中找到各种

问题,及解决方案,同时会分析大量的原理,单例模式中的场景也很容易理解,想确保任何情况下都绝对只有一个实例,

单例模式的实际应用也有很多,例如在单服务的情况下,网站的计数器可以用单例,在集群的模式下就要用共享的计数器了,

还有一些应用配置,那用线程池的时候呢,一般也采用单例去设计,还有数据库的连接池一般也是单例模式的,单例模式在我们

日常工作中,使用的也是最广泛的,所以我们认认真真的学会理解掌握这里面的基本原理,还是非常重要的

我们看一下单例模式的优点是什么呢,首先在内存里面只有一个实例,减少了内存开销,特别是一个对象需要频繁的创建,

而且创建和销毁的性能又无法优化,那这个时候单例的优势就比较明显了,可以避免对资源的多重占用,例如我们对一个文件进行

写操作,但由于只有一个实例,可以避免同时对同一个文件进行写操作,那这个也容易理解,单例模式设置了全局访问点,严格的控制

访问,也就是我对外呢不让你new出来,你只能通过方法调用获得,严格的控制访问

单例的模式的缺点是什么呢,没有接口,扩展会比较困难,如果想扩展的话,你要修改代码,基本上没有其它途径

可以实现

单例模式还有一些重点要讲的,首先呢是私有构造器,这个是为了禁止从单例类外部调用构造函数,来创建这个对象,

为了达到这个目的呢,必须设置构造函数的权限为private,这个呢很好理解,然后是线程安全,单例模式对于线程安全,

非常重要,那在后面的coding中,也会一起来演进这个代码,从线程安全这个角度来分析单例模式,那线程安全在单例模式

中是非常非常重要的,这一点不能够忽略,然后是延迟加载,延迟加载也是非常重要,我们想使用他的时候,再创建,那这个

也是要延迟加载了,我们会一起来coding,各种方案以演进的方式来讲解,关于延迟加载的一些解决方案,还有序列号和

反序列化安全的问题,对于单例对象一旦序列号和反序列化的话,就会对单例进行破坏,那我们也会一起来分析源码,debug

跟进源码,相信在这个过程中有所收获的,还有一个重点就是反射,单例模式也要防止反射攻击,虽然我们在日常写代码的

时候,并不会特意这么做,但是基于工程师的思想,我们也要考虑这一点,并且也会领着一起来分析源码,包括反射类包的一些

源码,还有如何防御反射攻击,然后我们会一起分析来出坑,课程这么设计就是为了印象深刻,一块来理解透,前三个点相信

大家一定也知道,但是后两个点,绝对是加分项,期望能够理解透

后面也会重点来讲一下单例模式,使用double check使用双重锁检查锁的内存机制,这里面有两个图,后面会重点讲这两个图

还会讲一下静态内部类的解决方案,基于类初始化的延迟加载解决方案,这个图等我们讲到实现方案的时候,

也会重点来讲

非常重要的使用技能可以学习,例如说反编译,我们使用JAD工具,对于枚举类型进行反编译,然后一起来分析代码,

具体反编译如何使用呢,后面的coding也会一起来的,还有内存原理,就是前面说的那几个图,讲这个主要是说,

在单例模式实现方案的时候,对于线程安全这么一个关注点,是绝对不能忽略的,还有多线程debug,这个就更重要了,

有讲debug,我们演进TOMCAT集群,和Redis分布式的时候呢,我们要调试一个分布式锁,那这个时候就需要多进程debug,

那在我们这里,需要学习多线程debug,在实际的工作开发业务中,多线程这种场景,也是非常常见的,如果我们不能够控制

多线程中运行节奏的话,很有可能我们想重现一个问题,都重现不了,也无法找到问题的根源,所以这个技能是非常非常实用的,

希望都能get这个技能

那我们看一下单例模式相关的设计模式,首先单例模式和工厂模式,那在一些业务场景中,我们可以把工厂类

设计成单例模式的,这个就是属于设计模式的一个结合,然后单例模式和享元模式,那享元模式我们后面也会讲,

也有一些业务场景,因为要管理很多单例对象,所以通过单例模式和享元模式和单例模式的一个结合,来完成单例

模式的获取,那这个结合场景下,享元模式的应用就类似于单例的一个工厂,只不过这个工厂,会拿出已经创建好的,

并不会重新创建对象
在coding的过程中,希望我们的思维和技能呢,也是螺旋式上升的,那这个模式UML非常简单,就不看UML了,

然后一起来分析源码,看一下单例模式的一些应用,现在我们一起来coding吧

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值