设计模式之美学习(三十一)

本文最后更新于:3 个月前

为什么不推荐使用单例模式?

单例存在哪些问题?

  • 单例对 OOP 特性的支持不友好

  • 单例会隐藏类之间的依赖关系

  • 单例对代码的扩展性不友好

  • 单例对代码的可测试性不友好

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

单例有什么替代解决方案?

为了保证全局唯一,除了使用单例,我们还可以用静态方法来实现。不过,静态方法这种实现思路,并不能解决我们之前提到的问题。如果要完全解决这些问题,我们可能要从根上,寻找其他方式来实现全局唯一类了。
比如,通过工厂模式、IOC 容器(比如 Spring IOC 容器)来保证,由程序员自己来保证(自己在编写代码的时候自己保证不要创建两个类对象)。

有人把单例当作反模式,主张杜绝在项目中使用。个人觉得这有点极端。模式没有对错,关键看你怎么用
如果单例类并没有后续扩展的需求,并且不依赖外部系统,那设计成单例类就没有太大问题。对于一些全局的类,我们在其他地方 new 的话,还要在类之间传来传去,不如直接做成单例类,使用起来简洁方便。

参考: 单例模式(中):我为什么不推荐使用单例模式?又有何替代方案?



欢迎关注我的公众号😘