Patrones de diseño: Composite, Singleton y Adapter

Clasificado en Informática

Escrito el en español con un tamaño de 3,12 KB

Composite Problema:

¿Cómo tratar objetos que pueden ser compuestos de otros objetos como si fueran objetos individuales?

Aplicabilidad:

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: Representa los elementos atómicos (sin hijos). Define el comportamiento para los elementos primitivos de la composición.

Compuesto: 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 Componente.

Consecuencias:

Fácil introducción de nuevos tipos de componentes sin modificar código cliente existente. Los clientes son sencillos: evita lógica condicional en ellos y manipulan de igual forma los componentes.

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 patron Singleton posee una única clase participante: la propia clase singleton que se encarga de crear la instancia únicamente cuando ésta no haya sido previamente creada.

Consecuencias:

Permite el acceso controlado a una instancia. Fácilmente modificable para permitir un conjunto de instancias y no sólo una. Frente al uso de métodos de clase, el patrón Singleton sólo crea la instancia cuando ésta es utilizada por clientes, no desperdiciando recursos si no son necesarios, y permite fácil manejo de varias instancias (punto anterior).

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: Define la interfaz (servicios) que el cliente necesita. También se le llama Target.

Cliente: Utiliza objetos que conformen con Destino.

ClaseDestino: Define una interfaz (servicios) existente que necesita ser adaptada para poder ser utilizada por los clientes.

Adapter: Adapta la interfaz de ClaseDestino a la interfaz Destino para poser 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 adaptar también lo permita).

Entradas relacionadas: