设计模式 - 单例模式 - 基于 Java 实现

什么是单例模式

Ensure a class has only one instance, and provide a global point of access to it.

确保一个类产生的实例只有一个,自行的创建这个实例化对象,并且向着整个系统中提供这个实例

什么地方需要单例模式

举例:
1、在操作系统中的回收站,创建出来一个回收站的实例即可,不需要重复的创建多个回收站
2、网站的访问计数器类,只需要一个实例即可,多个计数器反而容易造成线程安全的问题

3、需要频繁实例化,然后销毁的对象,考虑使用单例模式,节约内存;
4、创建出来的对象消耗的时间比较长,并且使用的比较多的时候,可以考虑使用单例模式;
5、对于数据库的连接对象,只是需要一个就可以;
6、创建出来的某个管理器,比如配置管理器以及错误管理器,只是需要创建出来一个实例即可,不需要创建多个实例;

怎么实现单例模式

单例模式的实现方式有很多,相对来说,在保证线程安全的情况下,使用 DCL 模式的实现是比较优秀的;

基于 DCL(Double Check Lock)模式

创建出来的单例模式是线程安全的;
所谓的线程安全就是保证了代码块执行的原子性、可见性、有序性;

public class Singleton {  
    private volatile static Singleton singleton;  //1:volatile修饰
    private Singleton (){}  
    public static Singleton getSingleton() {  
	    if (singleton == null) {  //2:减少不要同步,优化性能
	        synchronized (Singleton.class) {  // 3:同步,线程安全
	        if (singleton == null) {  
	            singleton = new Singleton();  //4:创建singleton 对象
	    }  
	    return singleton;  
    }  
}

基于静态内部类模式

基于静态内部类的单例模式的实现是线程安全的,同时可以看出,基于这种模式下面创建出来的单例实例是比较简洁的,代码是容易看懂的;

public class Singleton { 
    private Singleton(){
    }
      public static Singleton getSingleton(){  
        return Inner.instance;  
    }  
    private static class Inner {  
        private static final Singleton instance = new Singleton();  
    }  
} 

使用单例模式的优点以及缺点

优点:
1、节省了内存空间
2、避免了重复的创建对象,提高了性能
3、因为是单例,只有这一个访问入口,所以为整个系统提供了一个全局访问点;

缺点:
1、不适合使用在变化频繁的对象
2、不能滥用单例模式,因为创建出来的大量的单例模式,长时间这个对象没有被使用的话,这个对象是会被垃圾回收器回收的;

小结

本文介绍了什么是单例模式,介绍了单例模式的两种实现:DCL以及静态内部类的实现,两者都是线程安全的,比较了单例模式的优点以及缺点,得出结论:不可大量的滥用单例模式,是要适量的使用即可;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值