单例模式 上

为什么要用单例

单例模式理解起来非常容易 一个类只允许创建一个对象(或者实例),那这个类就是一个单例,这种设计模式叫做单例设计模式。简称单例模式

1. 解决线程安全问题

2. 表示全局唯一

比如配置信息类,自系统中,我们只有一个配置文件,当这个配置文件加载到内存之后,以对象的形式存在,理所应当只用一份

比如Id 生成器,这里讲的时递增的id 生成器,如果程序有两个生成器,那么可能会存在重复的Id的情况

单例存在那些问题

单例模式,它时属于一种反模式,对于面向对象的四大特性的封装都不是特别的好。 它属于面向过程编程,有点硬编码的味道,违背了面向接口的编程

单例模式会隐藏类之间的依赖关系,我们一般通过构造函数,传参来表示类之间的依赖关系。但是单例模式不支持现实的创建,如果代码比较复杂,这种调用关系就会非常的隐蔽。在阅读代码的时候,需要仔细的查看每个函数的代码实现。 

对代码扩展性也不好,如果那天代码中需要创建多个实例,那么对代码的改动比较大。 

单例模式对代码的可测试性不好。 

单例模式不支持有参数的构造函数

有何替换的方案

我们刚刚提到单例模式有很多的问题,你可能会说,单例有那么多的问题,但我不用不行啊,我们业务上表示全局唯一类的需求,如果不用歌单里,我怎么才能保证这个类对象全局唯一呢? 

处理单例,我们还能用静态方法来实现。 这也是项目中项目中常用过的一种方式。 

我们可以用工厂模式,ioc 容器来保证。这就类似于java 中内存对象的释放由jvm 来复杂,而c++ 由长须一个道理。 

如何实现集群环境下的分布式单例

 

posted @ 2024-02-29 16:27  dousil  阅读(1)  评论(0编辑  收藏  举报