静态类和单例模式之间存在什么实际的区别?
两者都可以在没有实例化的情况下调用,两者都只提供一个“实例”,而且都不是线程安全的。还有其他区别吗?
静态类和单例模式之间存在什么实际的区别?
两者都可以在没有实例化的情况下调用,两者都只提供一个“实例”,而且都不是线程安全的。还有其他区别吗?
当前回答
我们有一个连接到后端的DB框架。为了避免跨多个用户的脏读,我们使用了单例模式来确保在任何时候都有一个实例可用。
在c#中,静态类不能实现接口。当单个实例类需要实现用于业务合同或IoC目的的接口时,这就是我在没有静态类的情况下使用Singleton模式的地方
Singleton提供了一种在无状态场景中维护状态的方法
希望这对你有帮助。。
其他回答
扩展Jon Skeet的答案
单例和一堆静态方法之间的最大区别是,单例可以实现接口(或从有用的基类派生,尽管这是不太常见的IME),因此您可以将单例作为“另一个”实现来传递。
当单元测试一个类时,单体更容易处理。无论您将单例作为参数(构造函数、setter或方法)传递到何处,您都可以替换单例的一个被嘲笑或存根的版本。
Singleton的被实例化。只是只有一个实例被创建过,因此在Singleton中只有一个。
另一方面,静态类无法实例化。
真正的答案是Jon Skeet在这里的另一个论坛上给出的。
单例允许访问单个已创建实例-该实例(或而是对该实例的引用)可以作为参数传递给其他方法,并视为正常对象静态类只允许静态方法。
主要区别在于:
Singleton有一个实例/对象,而静态类是一堆静态方法Singleton可以在静态时通过接口进行扩展班级不可能。Singleton可以继承,它支持另一方面,静态类不能继承SOLID原则我们需要自己做出改变。Singleton对象可以传递给方法,而静态类作为它没有实例不能作为参数传递
从客户端的角度来看,静态行为对客户端来说是已知的,但是Singleton行为可以对客户端隐藏完成。客户可能永远不会知道,他一次又一次地玩弄着一个实例。