码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-11-01 18:34:30      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:技术   线程   自己   png   图片   com   私有构造函数   单例模式   虚拟机   

今天新学了一种设计模式,叫做单例模式,具体是干啥用的,那些地方能用到他,其实我也不知道。好了,话不多说,直接上干货!

单例模式,顾名思义,单个实例对象的模式。单例模式一共分为六种写法,接下来一一为大家介绍。

第一个上场的小伙伴是我们的恶汉单例。恶汉,意思可能就是非常饥饿吧,所以在一开始就创建了一个实例对象来喂饱他。

关键点:()
1)私有构造函数
2)静态私有成员--在类加载时已初始化
3)公开访问点getInstance-----不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回

优缺点:因为在类加载时就创建了实例,所以加载速度慢,但是获取对象速度快。

代码如下:

技术图片

 

 接下来是懒汉单例。懒汉单例,特别懒,你用他他才创建实例对象。

类加载速度较快,但是获取实例对象速度较慢。代码如下:

技术图片

 

 关键点:
1)构造函数定义为私有----不能在别的类中来获取该类的对象,只能在类自身中得到自己的对象
2)成员变量为static的,没有初始化----类加载快,但访问类的唯一实例慢,static保证在自身类中获取自身对象
3)公开访问点getInstance: public和synchronized的-----public保证对外公开,同步保证多线程时的正确性(因为类变量不是在加载时初始化的)

静态内部类单例,代码如下:

技术图片

静态内部类的优点是:外部类加载时并不需要立即加载内部类,内部类不被加载则不去初始化j,故而不占内存。即当Jingtai第一次被加载时,并不需要去加载Nb,只有当getInstance()方法第一次被调用时,才会去初始化j,第一次调用getInstance()方法会导致虚拟机加载Nb类,这种方法不仅能确保线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化。
枚举单例:超级简单,但是到底是在怎么用的啊啊啊啊啊啊啊啊啊啊?????

技术图片

 

 懒汉的加锁模式

技术图片

 

 谢谢大家欢迎指正错误地方!!!!!!!!!!!!!!-------------------------------------------------------

 

单例模式

标签:技术   线程   自己   png   图片   com   私有构造函数   单例模式   虚拟机   

原文地址:https://www.cnblogs.com/zhang--/p/11778419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!