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 nivell de tot el sistema o programa. De vegades es generalitza el concepte per incloure a aquells sistemes que operen de manera més eficient quan només existeix un únic objecte de la classe, o bé quan només existeix un nombre reduït d'instàncies d'aquesta. També és considerat un anti-patró ja que sovint és utilitzat com a eufemisme de variable global.

Usos comuns[modifica | modifica el codi]

  • 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 són 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 | modifica el codi]

Diagrama de classes

Implementació[modifica | modifica el codi]

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 construït mandrosament, de manera que no requereixi 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 curosament 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 de processament concurrent, el mètode hauria de ser construït per a executar-se com a una operació 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 | modifica el codi]

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

Enllaços externs[modifica | modifica el codi]

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