设计模式之单例模式

今天我们来一起学习一下单例模式,

从字面意思上我们可以看出 单 这个字就是一个呗,那么简而言之就是只需要一个对象 ,我称之为有且只有一个对象存活于世啊,看着貌似挺孤单的是,稀有品种,这个说法还真可以站住脚的,

单例模式的一生是悲催的,只有它自己默默的承受这一切,没有小伙伴的苦谁又能懂了,好了,苦情戏告一段落了哈,下面切入正题

单例模式的好处

1、一生只有一个对象,占用空间少啊,

2、里面方法通常是无状态的,没有并发问题,但是同时如果存在了共享的成员变量,那么就会存在并发问题了

3、使用场景多多,例如是spring中的bean对象默认就是单例的,提高运行效率啊,省去创建对象的时间,

使用场景

1、工具类

2、支付共享对象

3、日志、拦截器等等,

4、可以这么说只要不存在共享变量的并发问题都可以使用此模式,用处大大的好,

5、我发现好像spring中都是使用的此模式

当然也存在挺多不适合的情况,比如对于共享的数据库连接池,基本上需要多个i对象同时存在的地方,单例就不好使,我说的多个对象是对同一种事务的多种处理

单例有哪几种实现形式

饿汉式、懒汉式、注册登记式、静态类、枚举

1.、饿汉式(形象的不行的比喻,我就是很饿我直接吃了,不管你们让不让吃,我先吃干净,哈哈)

优缺点:创建对象是单例且由jvm机制进行保护,济南要变天了么,缺点是不管用不用都占用资源,

变天  设计模式之单例模式

2.懒汉式(你不用我我就不去,干嘛求你们,到时候没有再说,哈哈,比较沉得住气啊,有魄力)却是

优缺点:实现了lanj懒加载,但是效率低下,因为加上了同步关键字,这时候效率会很低下,

设计模式之单例模式

3、静态内部类的方式

同时兼顾了 延时加载和同步功能(由jvm确保创建的是单例)

设计模式之单例模式

4、注册登记式

spring中使用的这样的模式,进行bean的管理和维护

 

上面介绍了几种单例模式的实现方式,我们视具体需求 选择不同的实现方式,

对于单例模式就讲到这里了,就结束了,对于该模式,理解为先,在正常开发中,也要结合现状进行后续工作,