设计模式之美学习(三十一)
本文最后更新于:6 个月前
为什么不推荐使用单例模式?
单例存在哪些问题?
单例对
OOP
特性的支持不友好单例会隐藏类之间的依赖关系
单例对代码的扩展性不友好
单例对代码的可测试性不友好
单例不支持有参数的构造函数
单例有什么替代解决方案?
为了保证全局唯一,除了使用单例,我们还可以用静态方法来实现。不过,静态方法这种实现思路,并不能解决我们之前提到的问题。如果要完全解决这些问题,我们可能要从根上,寻找其他方式来实现全局唯一类了。
比如,通过工厂模式、IOC
容器(比如 Spring IOC
容器)来保证,由程序员自己来保证(自己在编写代码的时候自己保证不要创建两个类对象)。
有人把单例当作反模式,主张杜绝在项目中使用。个人觉得这有点极端。模式没有对错,关键看你怎么用。
如果单例类并没有后续扩展的需求,并且不依赖外部系统,那设计成单例类就没有太大问题。对于一些全局的类,我们在其他地方 new
的话,还要在类之间传来传去,不如直接做成单例类,使用起来简洁方便。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!