Singleton 单例模式学习笔记

一、什么是单例模式

       单例设计模式指的是某个类保持只存在一个实例化对象。本文介绍的单例模式包括:懒汉模式、懒汉模式、双重锁单例模式、内部类模式、静态代码块模式、枚举单例模式。

二、存在场景

       1)网站的计数器

       2)数据库连接池

       3)Windows的Task Manager(任务管理器)

三、设计思路

       保持任何时刻只有一个实例化对象的方法就是:

       1.私有化构造方法,让其不能随时new一个出来。

       2.设一个对象引用,这个引用必须是private,防止外界访问,最好是final的,防止恶意修改,因为只有一个对象,所以设置为static。

       3.设置一个方法getinstance,外界可以拿到这个对象。满足以上三点,可以得到一个基本的单例模式:饿汉模式

       Singleton 单例模式学习笔记

       但是由于饿汉模式每次都需要在类初始化的时候加载完整个类,在整个类特别庞大或者引用资源数较大的时候,显得非常厚重,因此引入了:懒汉模式。饱汉模式就是把对象引用置为null,然后调用方法返回的时候,判断这个对象是否为空,不为空,就返回,否则,new一个。

       Singleton 单例模式学习笔记

       但是这个饱汉模式存在一个问题:当多线程访问判断语句的时候,可能会new多个出来,引发安全问题。为保证安全问题,需要加上关键字:synchronized(注意:这个关键词放置的位置不同,效果大不同)。

       Singleton 单例模式学习笔记

       此举虽然解决了线程安全问题,也实现了懒加载,但是实际使用中由于synchronized关键字的存在,效率很低,也是设法改进这一现象,出现了双重锁单例模式

       Singleton 单例模式学习笔记

       至此,单例模式优化到极致了,但是依然存在其他形式,都是利用语言的某些特性来实现这一功能,比如静态内部类单例模式静态代码块单例模式枚举单例模式等。

       Singleton 单例模式学习笔记

四、代码实现

       见我的github:单例设计模式

五、参考博客

       浅谈单例设计模式的几种实现方式

       单例模式三种模式,饿汉、饱汉、双重锁模式,实例及优劣详解

       单例模式的七种写法