单例模式是否违反了单一职责原则?

11
根据单一职责原则
每个类都应该对软件提供的功能的一个单独部分负责。
单例防止创建多个类实例,为其提供全局访问。
但这个功能与类的实际功能和它应该提供的功能没有任何关系。
这是否意味着Singleton模式违反了SRP?

1
不,但这并不是单例模式被人们反感的原因。 - duffymo
1
实例控制与功能正交。 - jaco0646
1个回答

12

大多数情况下,短答案是NO(不需要单例模式)。但具体情况取决于单例实现的方式。

单一职责原则意味着一个类应该只执行一个任务而不是多个与彼此无关的任务。因为如果一个类执行多个任务,在需求改变时,可能会破坏其他功能。这就是为什么建议一个类只执行一个任务/功能。

单例模式用于限制只创建一个对象。这与类功能无关。通常使用单例模式来避免创建重复的类实例,如DB连接。单例确保每个线程或类都使用相同的一致对象,并且不需要同步。


4
有些人认为单例模式违反了单一职责原则,因为它们控制着自己的创建和生命周期。请参考这里:https://dev59.com/YXVC5IYBdhLWcg3w9GA9 - Javier Quevedo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接