Estoy tratando de educar a mis colegas en el área de patrones de diseño. Algunos de los patrones originales de Gang of Four son un poco esotéricos, por lo que me pregunto si hay un subgrupo de patrones "esenciales" que todos los programadores deben saber. Al mirar la lista, creo que probablemente he usado
- Fábrica abstracta
- Método de la fábrica
- único
- Puente
- Fachada
- Mando
¿Cuáles usas en la práctica y para qué las usas?
design-patterns
Craig Schwarze
fuente
fuente
for, if, while...
etc" - difícil de medir cuán inútil sería eso.Respuestas:
Aquí hay una lista de los que he usado o visto en la práctica:
Singleton: el objeto de aplicación en ASP.Net es un excelente ejemplo de esto.
Adaptador: la conexión a bases de datos generalmente puede involucrar una clase de Adaptador al menos en mi área de cosas.
Factory - General para generar objetos, aunque lo vi más en algunos ASP clásicos más antiguos en el día.
Estrategia: tenía una aplicación que para cada tipo de dispositivo tenía una estructura similar para la clase que consideraría una implementación de este patrón.
Fachada: en algunos aspectos, esto es similar al patrón del Adaptador en términos de ser algo que generalmente une un par de sistemas.
fuente
Los autores compilaron los patrones de los diseños observados que encontraron en aplicaciones reales. Es probable que ninguna persona los use a todos, pero todos se usan.
fuente
Decorador .
EDITAR : en casi todos los proyectos que van más allá de la etapa 'trivial', uno termina con una interfaz IAction (los detalles pueden diferir):
La siguiente hora la paso escribiendo muchas clases pequeñas, casi triviales, que implementan IAction. Cuando se combinan, son muy potentes y flexibles.
Por ejemplo, an
LogAction
(escribir para iniciar sesión y realizar la IAction),NullAction
(no hacer nada y devolver true),ActionList
(realizar una lista de IActions y devolver el AND de los bools). En algunos casos, unAndAction
(devolver el AND de dos acciones, podría estar en cortocircuito o no)OrAction
, tambiénNotAction
tiene sentido.Aunque técnicamente de los ejemplos anteriores, solo LogAction es un Decorador (el otro no funciona exactamente en 1 IAction), todavía considero que esto es una generalización del patrón Decorator cuando hago una Lista de Acciones de LogActions de IActions.
fuente
Supongo que se refiere a restringir la pregunta al uso de patrones en código / proyectos propios (sin bibliotecas de clases y marcos de terceros).
Al igual que otros, también he usado los patrones Factory con mayor frecuencia. Luego
fuente
He usado muchos de los otros que ya se han mencionado (Singleton, Factory, Builder, Command, Strategy, etc.)
Uno que no he visto mencionado todavía es Flyweight, que tiendo a usar mucho. He proporcionado un ejemplo de implementación a continuación:
fuente
La mayoría de los patrones originales de Gang of Four todavía se usan hoy en día, pero hay otros ahora populares que no están en el libro.
Encuentre una referencia para Design Patters en el idioma que usa. Tienden a ser más concretos y utilizan características de lenguaje específicas para implementar los patrones de una manera más sucinta y elegante.
Tres excelentes recursos para patrones de diseño:
Libro "Head First Design Patterns" : el idioma de elección es Java, pero es relevante para todos los idiomas. Patrones de diseño dofactory : excelentes y gratuitas explicaciones de patrones de diseño .net con código. PluralSight - Biblioteca de patrones de diseño : esta se paga, pero es demasiado buena para no incluirla en la lista.
fuente
Bueno, si usa bibliotecas comunes como ACE, terminará usando más de lo que cree que usa. Yo uso Observador / Observable ampliamente :-)
fuente
Usé un Builder al menos una vez (el mismo proceso de conversión podría generar salida HTML o Excel).
Con frecuencia uso el Método de plantilla (para tareas relacionadas con JDBC o controladores abstractos Swing).
Una vez tuve que desarrollar muchas características nuevas en una aplicación basada en formularios, lo cual fue un desastre. Solo pude progresar después de haber refactorizado las cosas existentes a una solución basada en patrones estatales. (Bueno, la mayor parte).
También uso los comandos con frecuencia (acciones de oscilación) y los observadores también.
Una vez utilicé una solución tipo Mememento para detectar cambios en las formas de Swing. El formulario serializaría su estado de lo que comparé (igual ()) a estados anteriores.
fuente
Creo que tengo la mayoría de ellos a lo largo de mi carrera. El único que estoy seguro de que no he usado es ese Patrón de adaptador que se implementa con herencia múltiple en el libro, ya que no soy un gran fanático de la herencia múltiple.
fuente
Soy aficionado a Decorator. El único que tengo que agregar a los mencionados es Proxy.
fuente