Patró singleton

De Viquipèdia
Dreceres ràpides: navegació, cerca

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]

Diagrama de classes

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]

  1. Gamma, E, Helm, R, Johnson, R, Vlissides, J: "Design Patterns", page 128. Addison-Wesley, 1995

Enllaços externs [modifica]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: Patró singleton Modifica l'enllaç a Wikidata