为什么要用单例
单例模式理解起来非常容易 一个类只允许创建一个对象(或者实例),那这个类就是一个单例,这种设计模式叫做单例设计模式。简称单例模式
1. 解决线程安全问题
2. 表示全局唯一
比如配置信息类,自系统中,我们只有一个配置文件,当这个配置文件加载到内存之后,以对象的形式存在,理所应当只用一份
比如Id 生成器,这里讲的时递增的id 生成器,如果程序有两个生成器,那么可能会存在重复的Id的情况
单例存在那些问题
单例模式,它时属于一种反模式,对于面向对象的四大特性的封装都不是特别的好。 它属于面向过程编程,有点硬编码的味道,违背了面向接口的编程
单例模式会隐藏类之间的依赖关系,我们一般通过构造函数,传参来表示类之间的依赖关系。但是单例模式不支持现实的创建,如果代码比较复杂,这种调用关系就会非常的隐蔽。在阅读代码的时候,需要仔细的查看每个函数的代码实现。
对代码扩展性也不好,如果那天代码中需要创建多个实例,那么对代码的改动比较大。
单例模式对代码的可测试性不好。
单例模式不支持有参数的构造函数
有何替换的方案
我们刚刚提到单例模式有很多的问题,你可能会说,单例有那么多的问题,但我不用不行啊,我们业务上表示全局唯一类的需求,如果不用歌单里,我怎么才能保证这个类对象全局唯一呢?
处理单例,我们还能用静态方法来实现。 这也是项目中项目中常用过的一种方式。
我们可以用工厂模式,ioc 容器来保证。这就类似于java 中内存对象的释放由jvm 来复杂,而c++ 由长须一个道理。
如何实现集群环境下的分布式单例
标签:代码,生成器,模式,单例,设计模式,构造函数 From: https://www.cnblogs.com/dousil/p/18044663