写点什么

单例设计模式

用户头像
andy
关注
发布于: 2021 年 01 月 07 日
单例设计模式

思考:通过手写代码的方式实现单例模式


为了回答问题,首先解释什么是单例模式,然后基于高并发的情况,优化单例设计模式。


一、单例模式


单例模式指的是有且仅有一个实例化对象,这是单例设计模式的本质,基于这个本质,再看看单例设计模式的关键点在哪里。


为了实现单例设计模式,那么,对象的实例化就不能暴露出去,根据面向对象思想,就需要封装起来,只能由类的内部访问,而外部只能通过类暴露出去的全局方法进行访问,获取对象实例。构造方式私有化,是单例设计模式实现的关键。


虽然单例设计模式进行了构造方法私有化,但是需要考虑一个问题,那就是对象的实例化应该在什么时候完成,是系统进行初始化的时候,还是对象被第一次调用的时候。根据这样的思考,单例设计模式又分为饿汉式和懒汉式。


饿汉式指的是系统初始化时,就进行对象实例化。懒汉式指的是对象被第一次访问时进行实例化。


为了练习手写代码的方式,使用 Java 语言编写单例设计模式,下面提供了饿汉式和懒汉式的手写代码的图片,仅供参考。


饿汉式



懒汉式



二、多线程高并发


对于饿汉式而言,由于系统初始化的过程便进行了对象实例化,不会因为系统运行期间调用而产生新的对象。而对于懒汉式而言,对象实例化只有在被访问的时候才能实例化,那么,当多线程并发的情况下,线程抢占资源,导致同时产生了多个实例化对象,为此,需要进行安全处理。为了简化理解,这里针对实例化对象部分进行了同步处理,避免产生新的对象。实际上,这里可以加上各种不同的锁,保证对象新生成时的安全,不会产生多个对象。


懒汉式同步代码块处理



用户头像

andy

关注

还未添加个人签名 2019.11.21 加入

还未添加个人简介

评论

发布
暂无评论
单例设计模式