Wednesday, November 12, 2008

Patrones de diseño

Christopher Alexander, arquitecto de los años '60, creador del término de "Patrones de Diseño".
“Los patrones de diseño son el esqueleto de las soluciones a problemas comunes en el desarrollo de software.”

Los patrones de diseño son soluciones recurrentes al diseño de software. Son soluciones reutilizables para problemas comunes que se encuentran en el momento del desarrollo. Generalmente, un grupo de clases que resuelve de manera óptima un problema genérico a plicable a diferentes situaciones específicas.

Se clasifican en:

*Patrones de Creación: Inicialización y configuración de objetos.
*Patrones de estructura: Separan la interfaz de la implementación. Se ocupan de cómo las clases y objetos se agrupan, para formar estructuras más grandes.
*Patrones de comportamiento: Más que describir objetos o clases, describen la comunicación entre ellos.

PATRONES DE CREACIÓN

Fábrica Abstracta (Abstract Factory)
Proporcionar una interfaz que permite crear familias de objetos relacionados entre sí, sin especificar (ni conocer a priori) sus clases concretas.

Builder (Constructor virtual)

Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.

Método de Fabricación (Factory Method)
Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que crear.

Prototipado (Prototype)
Se basa en la clonación de ejemplares copiándolos de un prototipo.
SingletonEl patrón Singleton garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ésta instancia.

Singleton (Instancia única)
Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.

PATRONES DE ESTRUCTURA

Adaptador (Adapter)
Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.

Puente (Bridge)
Desacopla una abstracción de su implementación permitiendo modificarlas independientemente.

Objeto Compuesto (Composite)
Utilizado para construir objetos complejos a partir de otros más simples, utilizando para ello la composición recursiva y una estructura de árbol.

Envoltorio (Decorator)
Permite añadir dinámicamente funcionalidad a una clase existente, evitando heredar sucesivas clases para incorporar la nueva funcionalidad.

Fachada (Facade)
Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.

Peso Ligero (Flyweight)
Elimina la redundancia o la reduce cuando tenemos gran cantidad de objetos con información idéntica.

Apoderado (Proxy)
Mantiene un representante de un objeto.

PATRONES DE COMPORTAMIENTO

Cadena de responsabilidad (Chain of responsibility)
La base es permitir que más de un objeto tenga la posibilidad de atender una petición.

Orden (Command)
Encapsula una petición como un objeto dando la posibilidad de “deshacer” la petición.

Intérprete (Interpreter)
Intérprete de lenguaje para una gramática simple y sencilla.

Iterador (Iterator)
Define una interfaz que declara los métodos necesarios para acceder secuencialmente a una colección de objetos sin exponer su estructura interna.

Mediador (Mediator)
Coordina las relaciones entre sus asociados. Permite la interacción de varios objetos, sin generar acoples fuertes en esas relaciones.

Recuerdo (Memento)
Almacena el estado de un objeto y lo restaura posteriormente.

Observador (Observer)
Notificaciones de cambios de estado de un objeto.

Estado (Server)
Se utiliza cuando el comportamiento de un objeto cambia dependiendo del estado del mismo.

Estrategia (Strategy)
Utilizado para manejar la selección de un algoritmo.

Método plantilla (Template Method)
Algoritmo con varios pasos suministrados por una clase derivada.

Visitante (Visitor)
Operaciones aplicadas a elementos de una estructura de objetos heterogéne
a.