Patrones de diseño

En la ingeniería de software, un patrón de diseño es una solución genérica y repetitiva aplicable a problemas comunes que ocurren en el diseño de software. Un patrón de diseño no es un diseño definitivo que puede ser transformado en código directamente. Es mas bien una descripción o plantilla que nos indica el cómo resolver el problema y que puede usarse en muchas diferentes situaciones.
Los patrones de diseño pueden acelerar el proceso de desarrollo proporcionando paradigmas comprobados. El diseño eficaz de software requiere considerar cuestiones que pueden no ser visibles hasta después de la implementación.
El uso de patrones de diseño ayuda a prevenir problemas sutiles que pueden causar problemas mayores y mejora la legibilidad del código para los programadores y arquitectos familiarizados con los patrones.
A menudo, la gente sólo comprende la manera de aplicar ciertas técnicas de diseño de software para ciertos problemas. Estas técnicas son difíciles de aplicar a una amplia gama de problemas. Los patrones de diseño proveen soluciones generales, documentadas de una forma que no requieren detalles específicos vinculados a un problema particular.

Además, lo patrones le permiten a los desarrolladores comunicarse con nombres conocidos para las interacciones. Los patrones de diseño habituales se pueden mejorar con el tiempo haciéndolos más robustos que los diseños ad-hoc.

Patrones de diseño de creación
Son patrones de instanciación de clases. Estos pueden ser divididos en patrones de creación de clases y patrones de creación de objetos. Mientras que los primeros usan la herencia de manera efectiva en el proceso de instanciación, los segundos usan la delegación para hacer su trabajo.
  • Abstract Factory: Crea una instancia de varias familias de clases.
  • Builder: Separa la construcción de objetos de su representación.
  • Factory Method: Crea una instancia de varias clases derivadas.
  • Object Pool: Evita la costosa adquisición y liberación de recursos mediante el reciclado de objetos que ya no están en uso.
  • Prototype: Una instancia completamente inicializada que puede ser copiada o clonada.
  • Singleton: Una clase de la cual sólo puede existir una sola instancia.
Patrones de diseño estructurales
Estos tratan a cerca de composición de Clases y Objetos. El patrón estructural de creación de clases usa la herencia para componer interfaces. El patrón estructural de objetos define maneras de componer objetos para obtener nuevas funcionalidades.

  • Adapter: Hace que coincidan interfaces de diferentes clases.
  • Bridge: Separa la interfaz de un objeto de su implementación.
  • Composite: Una estructura de tipo árbol de objetos simples y compuestos.
  • Decorator: Agrega responsabilidades a objetos dinámicamente.
  • Facade: una única clase que representa todo un subsistema.
  • Flyweight: Una instancia granulada para compartir de manera eficiente.
  • Private class data: Restringe el acceso / muta el acceso.
  • Proxy: Un objeto que representa a otro objeto.
Patrones de diseño de comportamiento
Estos patrones son los que se ocupan específicamente de la comunicación entre los objetos.

  • Chain of responsability: Una forma de pasar una solicitud a través de una cadena de objetos.
  • Command: Encapsula una solicitud como un objeto.
  • Interpreter: Una manera de incluir elementos de un lenguaje a un programa.
  • Iterator: Accede secuencialmente los elementos de una colección.
  • Mediator: Define una comunicación simplificada entre clases.
  • Memento: Captura y restaura el estado interno de un objeto.
  • Null Object: Diseñado para actuar como valor por defecto de un objeto.
  • Observer: Una forma de notificar cambios a un número de clases.
  • State: Altera el comportamiento de un objeto cuando cambia su estado.
  • Strategy: Encapsula un algoritmo dentro de una clase.
  • Template Method: Difiere los pasos exactos de un algoritmo hacia una subclase.
  • Visitor: Define una nueva operación a una clase sin cambio.

Críticas
El concepto de patrones de diseño ha sido criticado por algunos en el campo de la informática. Sostienen que el uso de patrones de diseño es en realidad el resultado del uso de lenguajes o técnicas con insuficiente habilidad de abstracción. Como escribe Paul Graham en su ensayo La venganza de los nerds. O Peter Norvig, quien demuestra que 16 de 23 de los patrones presentados en el libro Design Patterns (enfocado a C++) están simplificado o incluso eliminados directamente por lenguajes como Lisp o Dylan.
Fuente: sourcemaking.com

0 comentarios:

Publicar un comentario

Muchas gracias por leer el post y comentarlo.

 
Copyright 2009 Programación SOLIDa
BloggerTheme by BloggerThemes | Design by 9thsphere