Str*_*ior 37
几乎每次我写一个静态类,我最终都希望我把它实现为一个非静态类.考虑:
由于这两点,非静态类使得为依赖于它们的项目编写更可靠的单元测试成为可能.
然而,单例模式距离静态类只有半步之遥.你那种得到这些好处,但如果你是直接与其它类中通过`ClassName.Instance"访问它们,你要创建一个障碍访问这些好处.就像ph0enix指出的那样,使用依赖注入模式会更好.这样,可以告诉DI框架特定类是(或不是)单例.您可以获得模拟,单元测试,多态性以及更多灵活性的所有好处.
ins*_*ode 12
让我总结一下:)
本质区别在于:单身的存在形式是一个对象,静态不是.这导致了以下几点:
最后但并非最不重要的是,每当你要实现一个单例时,请考虑重新设计你的想法,不使用这个上帝对象(相信我,你会倾向于将所有"有趣"的东西都放到这个类中)并使用正常的类命名为"上下文"或类似的东西.
单例可以懒惰地初始化.