单例模式

设计模式的介绍
1.设计模式代表了最佳的实践,是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
2.设计模式的本质提高了软件的维护性,通用性和扩展性,并降低软件的复杂度
3.一共有23中设计模式
4.设计模式并不局限于某种语言,java,php,c++都有设计模式

设计模式类型
1.创建型模式:单例模式,抽象工厂模式,原型模式,建造者模式,工厂模式
2.结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
3.行为型模式:模板方法模式,命令模式,访问者模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式

单列模式
定义:所谓的单例模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得器对象实例的方法(静态方法 )

单例模式八种方法:
1)饿汉式(静态常量)
2)饿汉式(静态代码块)
3)懒汉式(线程不安全)
4)懒汉式(线程安全,同步方法)
5)懒汉式(线程安全,同步代码块)
6)双重检查
7)静态内部类
8)枚举

饿汉式(静态常量)应用实例
步骤如下:
1)构造器私有化(防止new)
2)类的内部创建对象
3)向外暴露一个静态的公共方法。getInstance
4)代码实现
在这里插入图片描述

优缺点说明:
1)优点:这种写法比较简单,就是在类加载的时候完成实例化,避免了线程同步问题(解决了多线程问题)
2)缺点:在类加载的时候就完成了实例化,没有达到延迟加载的效果,也就是懒加载。如果从始至终未使用该类,会导致资源的浪费

饿汉式(静态代码块)应用实例
步骤如下
1)构造器私有化
2)创建本类的实例变量
3)放在静态代码块里
4)提供一个公共的静态方法,返回实例对象
5)代码实现
在这里插入图片描述

优缺点说明:
1)这种方法与前面静态常量方法类似,只不过将实例对象放在静态代码块中,在类加载的时候,就实例该对象
2)可能造成资源浪费

懒汉式(第一种线程不安全)
步骤如下(提供一个静态的公有方法,当使用到该方法时,才会去创建instance)
1)声明一个静态的本类对象
2)构造器私有化,防止外部new
3)提供一个静态方法
4)代码实现
在这里插入图片描述

优缺点说明:
优点:起到了懒加载的作用,但是这种情况只能在单线程下使用
缺点:如果在多线程的情况,一个线程进入了判断语句模块,还未来得及往下执行,另一个线程也通过这个判断语句,会产生多个实例,导致线程不安全,所以在多线程的情况下最好不使用这种方式

懒汉式(线程安全)
在这里插入图片描述

优缺点说明:
优点:解决了线程不安全的问题
缺点:方法同步导致效率太低了

懒汉式(线程安全,同步代码块)
在这里插入图片描述

优缺点说明:
缺点:线程不安全,在实际开发中不能使用

双重检查DCL+volatile模式(解决线程安全问题,同时解决懒加载问题)
代码实现
在这里插入图片描述

优缺点说明:
优点:
1)进行了俩次if(singletonnull)检查,这样保证了线程安全
2)实例化代码只会执行一次,后面再次访问时,判断if(singleton
null)直接return实例化对象,也避免的反复方法同步
3)线程安全,延迟加载,效率高
4)推荐使用

静态内部类
操作步骤:
1)构造器私有化,防止外部new
2)写一个静态的内部类方法
3)调用静态内部类方法
4)代码实现
在这里插入图片描述

优缺点说明:
1)这种方式采用了类加载的机制保证初始化实例时只有一个线程
2)静态内部类在Singleton类在被加载时不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化
3)JVM保证了线程的安全性
4)优点:避免了线程不安全,利用静态内部类特点实现延迟加载,效率高

枚举
代码实现
在这里插入图片描述

优缺点说明:
1)借助JDK1.5中枚举来实现单例模式,不仅能避免多线程同步的问题,而且还能防止反序列化重新创建新的对象
2)推荐使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackfjm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值