首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之单例模式

设计模式之单例模式

作者头像
小诸葛
发布2020-04-14 15:50:07
3460
发布2020-04-14 15:50:07
举报
文章被收录于专栏:方法论方法论

前言

单例模式(Sigleton Parttern)是23种设计模式中最简单也是最常见的一种设计模式,单例模式确保了一个类只有一个实例,由于内存中只有一个实例,因而减少了内存的开支,并且使用单例模式也可以减少对资源的多重占用等。

单例模式经常出现在面试题中,题型也比较,有时是选择题,有时会让手写单例模式实现代码,所以还是有必要牢牢掌握这个设计模式。

定义

单例模式的定义如下:

Ensure a class has only one instance,and provide a global point of access to it.(确保一个类只有一个实例,而且自行实例化并像整个系统提供这个实例。)

单例模式的通用类图如图1-1所示。

图1-1:单例模式通用类图

Singleton类称为单例类,通过构造方法私有化并自行实例化确保只有一个实例,单例模式的通用源代码如代码清单1-1所示 。

代码清单1-1 单例模式通用代码

public class Singleton {
    private static Singleton singleton = new Singleton();
    //限制产生多个实例
    private Singleton(){
    }
    //通过该方法获取实例对象
    private static Singleton getSingleton(){
        return singleton;
    }
}

单例模式有两种

单例模式有两种实现方式,分别为饿汉式单例和懒汉式单例,代码清单1-1所示为饿汉式单例,而懒汉式单例如代码清单1-2所示。

代码清单1-2 懒汉式单例代码

public class Singleton {
    private static Singleton singleton;
    //限制产生多个实例
    private Singleton(){
    }
    //通过该方法获取实例对象
    private static Singleton getSingleton(){
        if(singleton == null){
            singleton = new Singleton();
        }
        return singleton;
    }
}

单例模式的使用场景

在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现“不良反应”,可以采用单例模式,具体场景如下:

  • 要求生成唯一序列号的环境;
  • 创建一个对象需要消耗的资源较多,如要访问IO和数据库等资源;
  • 频繁使用的资源,例如:数据库连接。

除此之外,单例模式还有很多的应用场景,在此就一一列举了。

单例模式的注意事项

在高并发情况下,需要注意单例模式的线程同步问题,单例模式通常有两种实现方式,懒汉式单例是线程不安全的,一般建议采用懒汉式单例。

最佳实践

单例模式的应用非常广泛,如在Spring中,每个Bean默认就是单例的,这样做的优点是Spring容器可以管理这些Bean的生命周期,决定什么时候创建出来(默认项目启动的时候创建),什么时候销毁,销毁的时候要如何处理,等等。如果采用非单例模式(Prototype类型),则Bean初始化后的管理交由J2EE容器,Spring容器不再跟踪管理Bean的生命周期。

参考自 :《设计模式之禅》——秦小波

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小诸葛的博客 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档