Beware singletons

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The [[Singleton]] design pattern has several apparent advantages. The programmer can be sure that only one instance will exist. That instance is static. This saves the mess of having to pass around many references to the object. Also, [[Use lazy initialization pattern|lazy initialization]] is an inherent part of the pattern, which can improve performance.
+
:''Do not turn objects of a class into derived classes of the class. Be very suspicious of any derived class for which there is only one instance.'' --Riel's Heuristic 5.15, [[Arthur Riel 1996]]
  
However, these advantages can tempt the programmer to make unwise design decisions.
+
For the purposes of this maxim, "singleton" refers not specifically to the [[Singleton]] design pattern, but to any class of which there is only one instance. The risks of using the Singleton pattern are discussed on the [[Singleton]] page.
  
* The assumption that only one instance will ever be required can be shortsighted. For example, one may have a Settings object as a singleton. But if one later wishes to extend the software to run multiple objects each with their own Settings instance, much painstaking refactoring will be required.
+
[[Category:Riel's heuristics]]
* If you're using the static nature of the pattern to avoid passing around many references, it's a sign you might be overusing that class, and not following the maxim of [[Tell, don't ask]]. Possibly you have a [[God class]]. It's a sign that you should at least think about restructuring the code to reduce dependence on this class.
+
* You don't need a Singleton to make use of [[Use lazy initialization pattern|lazy initialization]]. If you're using a Singleton just for this, then you definitely need to get rid of it.
+

Latest revision as of 00:13, 21 July 2009

Do not turn objects of a class into derived classes of the class. Be very suspicious of any derived class for which there is only one instance. --Riel's Heuristic 5.15, Arthur Riel 1996

For the purposes of this maxim, "singleton" refers not specifically to the Singleton design pattern, but to any class of which there is only one instance. The risks of using the Singleton pattern are discussed on the Singleton page.

Personal tools