Patró singleton
En enginyeria de programari, el patró singleton és un patró de disseny que es fa servir per a restringir la instanciació d'una classe a un objecte. Això és útil quan es necessita exactament un objecte per a coordinar accions a tot sistema. De vegades és generalitzat a sistemes que operen més eficientment quan només un o pocs objectes existeixen. També és considerat un anti-patró ja que sovint és utilitzat com a eufemisme de variable global.
Taula de continguts |
Usos comuns [modifica]
- Els patrons Factoria abstracta, Builder, i Prototipus poden fer servir Singletons a la seva implementació.
- Els objectes Façana són sovint Singletons ja que només es necessita un objecte Façana.
- Els objectes d'estat són sovint Singletons.
- Sovint els Singletons son preferibles a les variables locals, ja que:
- No contaminen l'espai de noms global (o, a llenguatges sense espais de noms, el seu espai de noms contenidor) amb variables innecessàries.[1]
- Permeten alocatació i inicialització mandrosa, on les variables globals a molts llenguatges sempre consumirán recursos.
Diagrama de classes [modifica]
Implementació [modifica]
El patró singleton s'implementa creant una classe amb un mètode que crea una nova instància de la classe si no existeix ja una. Si ja existeix una, simplement retorna una referència a aquell objecte. Per a estar segur de què l'objecte no es pot instanciar de cap altre manera, el constructor es fa o bé privat o bé protegit. Cal fer notar la distinció entre una simple instància estàtica d'una classe i un singleton: tot i que un singleton pot ser implementat com una instància estàtica, també pot ser construit mandròsament, per a no requerir memòria o recursos fins que es necessiti. Una altra diferència notable és que les classes membre estàtiques no poden implementar una interfície, a menys que la interfície sigui simplemement un marcador. Així que si la classe ha de realitzar un contracte expressat per una interfície, s'ha de fer com un singleton.
El patró singleton ha de ser curòsament construït en aplicacions multifil. Si dos fils estan a punt d'executar el mètode de creació al mateix temps quan un singleton encara no existeix, els dos han de comprovar que no existeixi la instància del singleton i després només un hauria de crear-la nova. Si el llenguatge de programació té capacitat sde processament concurrent, el mètode hauria de ser construït per a executar-se com a un aoperació mútuament exclusiva.
La solució clàssica a aquest problema és fer servir exclusió mútua a la classe que indica que l'objecte està sent instanciat.
Referències [modifica]
- ↑ Gamma, E, Helm, R, Johnson, R, Vlissides, J: "Design Patterns", page 128. Addison-Wesley, 1995
- "C++ and the Perils of Double-Checked Locking" Meyers, Scott and Alexandrescu, Andrei, September 2004.
- "The Boost.Threads Library" Kempf, B., Dr. Dobb's Portal, April 2003.
Enllaços externs [modifica]
| A Wikimedia Commons hi ha contingut multimèdia relatiu a: Patró singleton |
- The "Double-Checked Locking is Broken" Declaration (Java)
- Java Singleton Pattern
- A Pattern Enforcing Compiler™ that enforces the Singleton pattern amongst other patterns
- Description from the Portland Pattern Repository
- Implementing the Singleton Pattern in C# by Jon Skeet
- A Threadsafe C++ Template Singleton Pattern for Windows Platforms by O. Patrick Barnes
- Implementing the Inheritable Singleton Pattern in PHP5
- Singleton Pattern and Thread Safety
- PHP patterns
- Javascript implementation of a Singleton Pattern by Christian Schaefer
- Singletons Cause Cancer
- Singleton examples
- Article "Double-checked locking and the Singleton pattern" by Peter Haggar
- Article "Use your singletons wisely" by J. B. Rainsberger
- Article "Simply Singleton" by David Geary
- Article "Description of Singleton" by Aruna
- Article "Why Singletons Are Controversial"
- The Google Singleton Detector analyzes Java bytecode to detect singletons, so that their usefulness can be evaluated.
- Jt J2EE Pattern Oriented Framework
- Serialization of Singleton in Java
|
|||||||||||