协慌网

登录 贡献 社区

静态类和单例模式之间的区别?

静态类和单例模式之间存在什么实际(即实际)差异?

两者都可以在没有实例化的情况下调用,两者都只提供一个 “实例”,它们都不是线程安全的。还有其他区别吗?

答案

是什么让你说单例或静态方法不是线程安全的?通常两者都应该实现为线程安全的。

单例和一堆静态方法之间的最大区别在于单例可以实现接口(或者从有用的基类派生,尽管根据我的经验这不太常见),所以你可以传递单例,好像它只是 “另一个” “实施。

真正的答案是 Jon Skeet, 在另一个论坛上

单例允许访问单个创建的实例 - 该实例(或者更确切地说,对该实例的引用)可以作为参数传递给其他方法,并作为普通对象处理。

静态类只允许静态方法。

  1. Singleton 对象存储在Heap 中 ,但静态对象存储在堆栈中
  2. 我们可以克隆 (如果设计者不允许它)单例对象,但是我们不能克隆静态类对象。
  3. Singleton 类遵循OOP (面向对象的原则),而静态类则不遵循。
  4. 我们可以使用 Singleton 类实现interface ,但是类的静态方法(或者例如 C# static class )不能。