美文网首页
设计模式之单例模式

设计模式之单例模式

作者: chanming | 来源:发表于2019-11-15 11:42 被阅读0次

不知不觉国庆假期已经过去了一半,是不是又碌碌无为,浑浑噩噩地度过了几天,哈哈,我也一样。今天,我们来讲一讲一个单例模式。这个应该是最简单的设计模式了,相信每一个程序员都能学会。


场景

如果我们在代码中需要一个全局类,我们可以让它变成一个单例。例如,我们在系统的多个地方需要读取一个配置文件,我们并不需要每次都去new一个实例,然后去读文件,只需要维护一个全局的Config类,并且每次使用的时候校验下文件是否变更即可。依赖可以减少类的创建跟销毁的时候的开销,二来也减少了读取文件的次数。又如我们需要维护一个计数器,我们当然不想每次统计的时候都穿透去写DB,我们可以先写到内存当中。还有,在程序开发中,我们常常运用到各种池化技术,我们可以将线程池,连接池作为一个单例,统一进行分配跟管理。

实现

在Java中,我们通常是这么实现单例的,原本我们的类的构造方法是公有的,所以我们无论在哪都能实例化这个类,所以我们必须把共有方法改成私有方法,然后通过一个共有函数来获取这个实例。



我们获取的时候,判断它是否为空,如果为空,那么就初始化一个新的,否则直接返回。相信聪明的朋友已经看到了这里面存在一个小问题,那就是存在并发,一般我们可以使用双if与synchronized关键字,让初始化的代码最多只会执行一次。


优点

因为是全局唯一的,所以减少了类的创建与销毁时候的开销。对于一些资源的实例,可以更加容易进行管理与维护,特别是对于一些配置类,多实例总会出现一些意想不到的错误。

总结

好了,今天我们学习了单例模式,是不是很简单,随手就能实现一个!欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

相关文章

网友评论

      本文标题:设计模式之单例模式

      本文链接:https://www.haomeiwen.com/subject/owxspctx.html