Singleton违反了单一责任原则吗?

lys*_*cid 4 singleton design-patterns single-responsibility-principle

根据单一责任原则:

每个班级都应对软件提供的单一功能负责

单例可以防止创建类的多个实例,从而提供对它的全局访问.

但是这个功能与该类的实际功能及其应该提供的内容无关.

这是否意味着Singleton模式违反了SRP?

You*_*bit 5

对于大多数情况,简短回答是否定的 同样,它可以取决于Singleton的实现.

单一责任意味着一个类应该只执行一个任务而不是多个彼此无关的任务.因为如果类正在执行多个任务并且需求发生任何变化,也可能会破坏任务的其他功能.这就是为什么总是建议一个类只执行一个任务/功能.

Singleton用于限制仅一个对象创建.这与类功能无关.通常使用Singleton来避免像DB连接那样创建类的繁重多个实例.Singleton确保每个线程或类将使用相同的一致对象,并且不需要同步.

  • 一些人认为,它们恰恰打破了单一责任原则,因为它们控制着自己的创建和生命周期。看看这个http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons (4认同)