前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(4) -单例模式

设计模式(4) -单例模式

作者头像
惊羽-布壳儿
发布2022-06-15 16:00:16
1330
发布2022-06-15 16:00:16
举报
文章被收录于专栏:惊羽-布壳儿

当实例的应用场景是单例,并且创建和销毁的开销比较大,长时间应用的实例,考虑用单例模式;

① spring依赖注入时,其注入实例都是单例的

源码 :

代码语言:javascript
复制
    protected Object getSingleton(String beanName, boolean allowEarlyReference) {
        Object singletonObject = this.singletonObjects.get(beanName);
        if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
            synchronized (this.singletonObjects) {
                singletonObject = this.earlySingletonObjects.get(beanName);
                if (singletonObject == null && allowEarlyReference) {
                    ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);
                    if (singletonFactory != null) {
                        singletonObject = singletonFactory.getObject();
                        this.earlySingletonObjects.put(beanName, singletonObject);
                        this.singletonFactories.remove(beanName);
                    }
                }
            }
        }
        return (singletonObject != NULL_OBJECT ? singletonObject : null);
    }

先从缓存获取bean(this.singletonObjects.get(beanName)),如为null,则单例加锁构造一个实例,保证注入的实例都是单例的,这些实例都是不太容易销毁的,所以这样做节省了重复创建对象的开销;

② 例如jdbc中,DriverManager,其本身是一个管理者角色,用于统筹 Driver的register和获取Connection的衔接,更偏向于面向过程,其根本就没有实例化的必要,所以可以用私有化其构造方法来控制;

源码 :

代码语言:javascript
复制
package java.sql;

....
public class DriverManager {
	....
  /* Prevent the DriverManager class from being instantiated. */
    private DriverManager(){}
	....
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 当实例的应用场景是单例,并且创建和销毁的开销比较大,长时间应用的实例,考虑用单例模式;
    • ① spring依赖注入时,其注入实例都是单例的
      • ② 例如jdbc中,DriverManager,其本身是一个管理者角色,用于统筹 Driver的register和获取Connection的衔接,更偏向于面向过程,其根本就没有实例化的必要,所以可以用私有化其构造方法来控制;
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档