Patrones de Diseño Estructurales y Creacionales: Composite, Singleton y Adapter
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 3,56 KB
Patrón de Diseño Composite
Problema
¿Cómo tratar objetos que pueden ser compuestos de otros objetos como si fueran objetos individuales?
Aplicabilidad
Se utiliza para representar jerarquías de objetos compuestos de otros objetos, así como de objetos individuales. Los clientes ignoran las diferencias entre objetos individuales y objetos compuestos dentro de esa jerarquía y los manipulan indistintamente.
Participantes
- Componente: Abstrae los diferentes elementos de la jerarquía. Declara una interfaz común para ellos. Implementa comportamiento por defecto para todos ellos (si corresponde).
- Hoja (Leaf): Representa los elementos atómicos (sin hijos). Define el comportamiento para los elementos primitivos de la composición.
- Compuesto (Composite): Define el comportamiento para los componentes con hijos. Almacena a sus hijos. Permite el manejo de los hijos (agregar, eliminar, etc.).
- Cliente: Manipula objetos de la composición a través de los servicios brindados por el Componente.
Consecuencias
Fácil introducción de nuevos tipos de componentes sin modificar el código cliente existente. Los clientes son sencillos: se evita la lógica condicional en ellos y manipulan de igual forma los componentes.
Patrón de Diseño Singleton
Problema
¿Cómo asegurar que una clase tenga una sola instancia accesible globalmente?
Aplicabilidad
Utilice Singleton cuando una clase deba tener una única instancia globalmente accesible para cualquier cliente.
Participantes
El patrón Singleton posee una única clase participante: la propia clase Singleton, que se encarga de crear la instancia únicamente cuando esta no haya sido previamente creada.
Consecuencias
- Permite el acceso controlado a una instancia.
- Fácilmente modificable para permitir un conjunto de instancias y no solo una.
- Frente al uso de métodos de clase, el patrón Singleton solo crea la instancia cuando esta es utilizada por clientes, no desperdiciando recursos si no son necesarios, y permite el fácil manejo de varias instancias (punto anterior).
Patrón de Diseño Adapter
Problema
¿Cómo hacer interactuar una clase ya creada con otra cuya interfaz (servicios) cambió?
Aplicabilidad
Se utiliza para transformar una interfaz en otra, de tal modo que una clase que no pueda utilizar la primera haga uso de ella a través de la segunda.
Participantes
- Destino (Target): Define la interfaz (servicios) que el cliente necesita. También se le llama Target.
- Cliente: Utiliza objetos que se conformen con la interfaz Destino.
- Clase Destino (Adaptee): Define una interfaz (servicios) existente que necesita ser adaptada para poder ser utilizada por los clientes.
- Adapter: Adapta la interfaz de la Clase Destino a la interfaz Destino para poder ser utilizada por los clientes.
Consecuencias
Un adaptador puede cambiar su clase de destino dinámicamente (en tiempo de ejecución). Puede desde simplemente adaptar el nombre de una operación hasta adaptar toda una interfaz completa, incluyendo los parámetros. Generalmente, el objeto adaptado ya no puede ser utilizado mediante su vieja interfaz (a menos que el adaptador también lo permita).