Articulo de referencia

Patrón multitono

Diagrama UML del multitono En ingeniería de software , el patrón multiton es un patrón de diseño que generaliza el patrón singleton . Mientras que el patrón singleton permite la...

Diagrama UML del multitono
Diagrama UML del multitono

En ingeniería de software , el patrón multiton es un patrón de diseño que generaliza el patrón singleton . Mientras que el patrón singleton permite la creación de una sola instancia de una clase, el patrón multiton permite la creación controlada de múltiples instancias, lo cual gestiona mediante el uso de un mapa .

En lugar de tener una única instancia por aplicación (por ejemplo, el java.lang.Runtimeobjeto en el lenguaje de programación Java ), el patrón multiton garantiza una única instancia por clave .

El patrón multiton no aparece explícitamente como un patrón en el prestigioso libro de texto de programación orientada a objetos Design Patterns . [ 1 ] Sin embargo, el libro describe el uso de un registro de singletons para permitir la creación de subclases de singletons, [ 2 ] que es esencialmente el patrón multiton.

Descripción

Aunque pueda parecer que el multiton es una tabla hash con acceso sincronizado, existen dos diferencias importantes. Primero, el multiton no permite que los clientes añadan asignaciones. Segundo, el multiton nunca devuelve una referencia nula o vacía; en su lugar, crea y almacena una instancia de multiton en la primera solicitud con la clave asociada. Las solicitudes posteriores con la misma clave devuelven la instancia original. Una tabla hash es simplemente un detalle de implementación y no el único enfoque posible. Este patrón simplifica la recuperación de objetos compartidos en una aplicación.

Dado que el grupo de objetos se crea solo una vez, al ser un miembro asociado a la clase (en lugar de a la instancia), el multiton conserva su comportamiento plano en lugar de evolucionar hacia una estructura de árbol .

El patrón multiton es único porque proporciona acceso centralizado a un único directorio (es decir, todas las claves están en el mismo espacio de nombres ) de multitones, donde cada instancia de multiton en el grupo puede existir con su propio estado . De esta manera, el patrón promueve el almacenamiento indexado de objetos esenciales para el sistema (como el que proporcionaría un sistema LDAP , por ejemplo). Sin embargo, un multiton se limita a un uso generalizado por un solo sistema, en lugar de una miríada de sistemas distribuidos.

Desventajas

Este patrón, al igual que el patrón Singleton , hace que las pruebas unitarias sean mucho más difíciles, [ 3 ] ya que introduce un estado global en una aplicación.

En los lenguajes con recolección de basura, esto puede convertirse en una fuente de fugas de memoria, ya que introduce referencias fuertes globales a los objetos.

Implementaciones

En Java, el patrón multiton se puede implementar utilizando un tipo enumerado , donde los valores del tipo corresponden a las instancias. En el caso de un tipo enumerado con un único valor, esto da como resultado el patrón singleton.

En C#, también podemos usar enumeraciones, como muestra el siguiente ejemplo:

espacio de nombres Wikipedia.Ejemplos ;using System ; using System.Collections.Generic ;enum público MultitonType { Cero , Uno , Dos }public class Multiton { private static readonly Dictionary < MultitonType , Multiton > instances = new ();tipo MultitonType privado ;privado Multiton ( MultitonType tipo ) { este . tipo = tipo ; }public static Multiton GetInstance ( MultitonType type ) { // Inicialización diferida (no es seguro para subprocesos como está escrito) // Se recomienda usar Double Check Locking si se necesita seguridad para subprocesos if ( ! instances . TryGetValue ( type , out Multiton instance )) { instance = new ( type );instancias . Agregar ( tipo , instancia ); }devolver instancia ; }public override string ToString () { return $"Mi tipo es {this.type}" ; }// Sample usagepublicstaticvoidMain(string[]args){Multitonm0=Multiton.GetInstance(MultitonType.Zero);Multitonm1=Multiton.GetInstance(MultitonType.One);Multitonm2=Multiton.GetInstance(MultitonType.Two);Console.WriteLine(m0);Console.WriteLine(m1);Console.WriteLine(m2);}}

References

  1. O'Docherty, Mike (2005). Object-oriented analysis and design: understanding system development with UML 2.0. Chichester: Wiley. p. 341. ISBN 0470092408.
  2. Design patterns: elements of reusable object-oriented software. Boston, Mass. Munich: Addison-Wesley. 2011. p. 130. ISBN 0-201-63361-2.
  3. "Clean Code Talks - Global State and Singletons".
  • Multiton implementation in Ruby language
  • Multiton usage in PureMVC Framework for ActionScript 3
  • Article with a C# Multiton implementation, example of use, and discussion of memory issues
Obtenido de " https://en.wikipedia.org/w/index.php?title=Multiton_pattern&oldid=1357078206 "