Create
Learn
Share

GoF - Patrones de Diseño

rename
josedusol's version from 2016-09-13 16:52

Summary

Gang of Four (i.e. GoF) Patrones de diseño.

Creacion

PatternDescription
Abstract FactoryIntención
Provee una interface para crear familias de objetos relacionados o dependientes, delegando la creacion de instancias concretas a las subclases.

Aplicacion
- El sistema necesita ser independiente de como sus productos son creados.
- El sistema debe configurarse para trabajar con una o varias familias de productos
- Una familia de productos esta diseñada para trabajar en conjunto, y es necesario asegurar esta condición.
BuilderIntención
Separa la construcción de un objeto complejo de su representación, para que el mismo proceso de construcción pueda crear diferentes representaciones.

Aplicación
- El proceso de construcción debe permitir diferentes representaciones del objeto a construir.
- El proceso de construcción debe ser independiente de las partes que forman el objeto a construir.
Factory MethodIntención
Provee una interface para crear un objeto, delegando la creación de instancias concretas a las subclases.

Aplicación
- Una clase no puede anticipar a priori que instancias concretas necesita.
- Una clase requiere que las subclases puedan decidir que instancias concretas crear.
SingletonIntención
Asegura que una clase solo tenga una instancia, y provee un punto de acceso global a esta.

Aplicación
- Debe haber una sola instancia (o una cantidad determinada) de una clase, y esta debe ser accesible para los clientes.
memorize

Estructural

PatternDescription
AdapterIntención
Convierte la interface de una clase en otra interface que el cliente espera. Permite que clases con interfaces incompatibles puedan trabajar juntas.

Aplicacion
- Se requiere trabajar con una clase cuya interface no es compatible con lo necesario.
- Se requiere crear una clase reusable que pueda en el futuro colaborar con otras clases no relacionadas.
CompositeIntención
Permite representar estructuras jerárquicas de objetos y acceder a estos de manera uniforme.

Aplicación
- Se necesita representar una jerarquia de objetos donde unos estan compuestos de otros.
- Se necesita que el cliente ignore las diferencias entre objetos compuestos e individuales.
FacadeIntención
Provee una interface unificada para el conjunto de interfaces de un sub-sistema, haciéndolo mas fácil de usar.

Aplicación
- Se requiere proveer una interface sencilla para un sub-sistema complejo.
- Hay muchas dependencias entre clases cliente y las clases del sub-sistema.
- Se requiere organizar el sistema en capas. Cada capa puede tener una fachada que indica su punto de acceso.
ProxyIntención
Provee un intermediario para el acceso a un objeto.

Aplicación
- Proxy Remoto
Representa en forma local un objeto remoto que se encuentra en otro espacio de direcciones, posiblemente en otro nodo.
- Proxy Virtual
Cuando el objeto real es costoso en recursos, el proxy virtual puede hacer su carga a demanda o parcial.
Ej: EntityFramework y las entidades en el modo lazyloading.
- Proxy Protección
Controla el acceso al objeto real, realizando verificación de permisos.
- Proxy Inteligente
Ej: Puntero inteligente: lleva cuenta de las instancias creadas y libera memoria automaticamente.
memorize

Comportamiento

PatternDescription
ObserverIntención
Define una dependencia de uno-a-muchos entre objetos para que cuando el estado de un objeto cambie los dependientes sean notificados automáticamente.

Aplicacion
- Cuando un cambio en un objeto requiere cambiar otros y no se conoce cuantos objetos deben cambiar.
- Cuando un objeto debe poder notificar a otros sin conocer los detalles de implementacion de estos.
StateIntención
Permite a un objeto alterar su comportamiento según su estado.

Aplicacion
- El comportamiento de un objeto depende de su estado en tiempo de ejecución.
- Se tienen operaciones complejas con muchos condicionales que dependen del estado del objeto.
StrategyIntención
Define una familia de algoritmos, los encapsula y hace intercambiables en tiempo de ejecución.

Aplicación
- Se tienen muchas clases que solo se diferencian en comportamiento.
- Se necesitan diferentes variantes para un algoritmo.
- Una clase decide diferentes comportamientos usando estructuras de control switch-case o if-else.
- Se requiere que el cliente no conosca los detalles de implementacion de un algoritmo.
Template MethodIntención
Define el esqueleto de un algoritmo, delegando la implementacion de algunos pasos a las subclases.

Aplicación
- Se tiene un algoritmo con partes invariantes y partes variantes. Las partes variantes se les deja a las subclases para implementar.
- Hay codigo con comportamiento comun en varias subclases. Este se puede factorear.
VisitorIntención
Representa una operación que debe aplicarse sobre una jerarquia de objetos. Permite definir nuevas operaciones sin modificar dicha jerarquía.

Aplicacion
- Se requiere aplicar operaciones sobre una jerarquia de objetos sin poluir las clases con dichas operaciones.
- La jerarquia de objetos cambia raramente, pero se crean nuevas operaciones con frecuencia.
memorize