Catálogo de Modismos y Patrones
Esta receta incluye únicamente una clasificación de patrones a modo de catálogo y una pequeña descripción de cada uno. Desde aquí enlazaré las recetas específicas para cada patrón.
Creación de objetos
Forma canónica ortodoxa
En los lenguajes que lo soportan (C++), permite que una clase definida por el usuario se comporte como un tipo concreto de dato, es decir, como un tipo de dato “empotrado” (built-in) proporcionado por el lenguaje.
Abstract Factory
Es un mecanismo para encapsular un grupo de factorías concretas. Permite crear objetos sin necesidad de conocer la clase concreta en tiempo de compilación (Definición)
Builder
Se usa para construir objetos complejos, a menudo como una serie de pasos, pero desacoplando la representación concreta. (Definición)
Factory Method
También llamado “constructor virtual”. Es una interfaz para la creación de objetos, pero delega a las subclases, qué clase utilizar. (Definición)
Prototype
Permite crear objetos a partir de otros que sirven de prototipos. A menudo se emplea como medio de construcción en factorìas. (Definición)
Singleton
Garantiza que la aplicación sólo pueda crear una instancia de una clase dada. Intentos posteriores de crear nuevos objetos devuelven siempre la instancia original. (Definición)
Smart Pointer
Es una clase que se utiliza como si fuera un puntero pero que añade funcionalidad adicional. La más común e importante es que libera automáticamente la memoria dinámica del objeto al que apunta (Definición)
Estructurales
Composición de clases y objetos
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
El peso mosca es un patrón muy útil en aplicaciones que utilizan muchos objetos parecidos o idénticos. El objetivo es compartir parte del estado del objeto. Cuando varias instancias comporten los mismos valores para sus atributos (tamaño, color, forma, etc.) realmente el objeto solo se crea una vez y las siguientes instancias referencian el estado del objeto existente (“Definición”:“”http://es.wikipedia.org/wiki/Flyweight_%28patr%C3%B3n_de_dise%C3%B1o%29">http://es.wikipedia.org/wiki/Flyweight_%28patr%C3%B3n_de_dise%C3%B1o%29).
Proxy
Data Mapper
Desacopla una clase de modelo (la que mantiene los datos en memoria) de su persistencia. Se utiliza una clase adicional que realiza la operaciones sobre la la BD Esto permite que los aspectos de la persistencia puedan cambiar en el futuro sin afectar a la lógica de la aplicación. La persistencia puede estar basada en ficheros, en una BD o incluso mediante un agente remoto sin que eso tenga consecuencias o implique hacer cambios en las clases de la capa de negocio. (Definición)
De comportamiento
Interacción entre clases u objetos y sistemas para asignar responsabilidades.
Chain of Responsability
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Dado un conjunto de subclases, la superclase puede expresar (mediante un método) un algoritmo a base de invocaciones a otros métodos de la clase, que actúan como primitivas. Las subclases puede redefinir esos métodos-primitiva para cambiar la funcionalidad pero la secuencia de pasos es la misma para todas ellas. El algoritmo no tiene porqué ser estático, puede estar dirigido por un fichero de entrada (un XML, un bytecode, etc.) que indique qué primitiva debe invocarse en cada momento. (Definición)
Visitor
Model-View-Controller
Aplicaciones concurrentes
Reactor
Permite gestionar múltiples eventos asíncronos utilizando un flujo único de ejecución.
Proactor
Asynchronous Completion Token
Acceptor-Connector
Guard
Interfaz segura para multi-hilos
Aviso de hecho
Objetos activos
Monitores
Mitad-síncrono, mitad-asíncrono
Líder-y-Seguidores
Referencias
- Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2.
- Patrones de diseño para aplicaciones concurrentes
- http://agamenon.uniandes.edu.co/~pfiguero/soo/