Difference between static class and singleton pattern?

What real (ie practical) difference exists between a static class and a singleton pattern?

Both can be invoked without instantiation, both provide only one "Instance" and neither of them is thread-safe. Is there any other difference?


What makes you say that either a singleton or a static method isn't thread-safe? Usually both should be implemented to be thread-safe.

The big difference between a singleton and a bunch of static methods is that singletons can implement interfaces (or derive from useful base classes, although that's less common, in my experience), so you can pass around the singleton as if it were "just another" implementation.


The true answer is by Jon Skeet, on another forum here.

A singleton allows access to a single created instance - that instance (or rather, a reference to that instance) can be passed as a parameter to other methods, and treated as a normal object.

A static class allows only static methods.


  • Singleton objects are stored in Heap , but static objects are stored in stack .
  • We can clone (if the designer did not disallow it) the singleton object, but we can not clone the static class object .
  • Singleton classes follow the OOP (object oriented principles), static classes do not.
  • We can implement an interface with a Singleton class, but a class's static methods (or eg a C# static class ) cannot.
  • 链接地址: http://www.djcxy.com/p/2224.html

    上一篇: 数组,堆和堆栈和值类型

    下一篇: 静态类和单例模式之间的区别?