概述
创建型设计模式-单例设计模式和应用
单例设计模式
-
单例设计模式:
- 单例的意思只包含一个对象被称为但是的特殊类
- 通过单例设计模式可以保证系统种,应用该模式的类只有一个对象实例
-
使用场景:
- 业务系统全局只需要一个对象实例,比如发号器。redis链接对象等
- Spring IOC容器中的bean默认就是单例
- Spring boot 中的controller、service、dao层中通过@Autowire的依赖注入对象默认都是单例模式
-
分类:
- 懒汉:所谓的懒加载,延迟创建对象。
- 饿汉:与懒汉相反,提前创建对象
-
实现步骤
- 私有化构造方法
- 提供获取单例的方法
单例设计模式中的懒汉式实现方法
- 单例设计模式-懒汉式的几种实现方法
package Java设计模式.创建型设计模式.单例设计模式;
import java1031.LazySingleton;
/**
* @Author: ruan
* Date: 2021/11/17 14:29
* @Description: 单例,懒汉式
*/
public class SingletonLazy {
private static SingletonLazy instance;
/**
* 私有化构造方法
*/
private SingletonLazy(){};
/**
* 测试方法
*/
public void process(){
System.out.println("方法调用成功");
}
/**
* 第一种方法
* 对外暴漏一个获取实例的方法(多线程下存在安全问题)
*/
/*public static SingletonLazy getInstance(){
if (instance == null){
instance = new SingletonLazy();
}
return instance;
}*/
/**
* 第二种方法
* 通过synchronized加锁保证单例
* 采用synchronized对方法加锁有很大的性能开销
* 解决方法:降低锁粒度
* @return
*/
public synchronized static SingletonLazy getInstance(){
if (instance == null){
instance = new SingletonLazy();
}
return instance;
}
}
单例模式中的懒汉式实现+双重检查锁定+内存模型
- 改进实现方法
/**
* 第三种方法
* DCL双重检查锁定(Double-Checked-Locking),多线程情况下保证高性能
* 是否安全?
* instance = new SingletonLazy()并不是原子性操作?
* 1、分配空间给对象
* 2、在空间内创建对象
* 3、对象赋值给引用
* 所以要加上volatile关键字,防止指令重排序
* @return
*/
private static volatile SingletonLazy instance;
public static SingletonLazy getInstance(){
//第一重检查
if (instance == null){
//线程锁定
synchronized (LazySingleton.class){
//第二重检查
if (instance == null){
instance = new SingletonLazy();
}
}
}
return instance;
}
单例模式中的饿汉式实现方法
- 饿汉方式:提前创建好对象
- 优点:实现简单,没有多线程同步问题
- 缺点:不过有无使用,instance对象一直占着内存
- 如何选择:
- 如果对象不大,且创建不复杂,之间使用饿汉式
- 其他情况使用懒汉式
package Java设计模式.创建型设计模式.单例设计模式;
/**
* @Author: ruan
* Date: 2021/11/17 15:12
* @Description: 单例设计模式-饿汉式
*/
public class SingletonHungry {
private static SingletonHungry instance = new SingletonHungry();
private SingletonHungry (){};
public static SingletonHungry getInstance(){
return instance;
}
}
JDK源码里面的单例设计模式
-
JDK中Runtime类 饿汉方式
-
JDK中Desktop类 懒汉方式
最后
以上就是繁荣羽毛为你收集整理的创建型设计模式-单例设计模式和应用创建型设计模式-单例设计模式和应用的全部内容,希望文章能够帮你解决创建型设计模式-单例设计模式和应用创建型设计模式-单例设计模式和应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复