Soy bastante nuevo en Patrones de diseño. Acabo de encontrar el Patrón de diseño de fábrica. Entendí que delega la creación de instancias en subclases. Pero no obtuve la aplicación real del patrón. En qué escenarios se puede utilizar este patrón con buenos resultados. He oído hablar de abuso de patrones y no me gustaría complacerme en eso. ¿Alguien puede mencionar un ejemplo del mundo real donde se usa comúnmente?¿Cuáles son los usos prácticos de Factory Method Pattern?
Respuesta
Lo he usado para complementos de aplicaciones ... de esta manera puede hacer que su aplicación principal llame a la fábrica de clases para instanciar el complemento específico que implementa alguna interfaz que haya desarrollado en su aplicación principal. De esta manera, puede codificar la parte principal de su aplicación sin tener que saber qué se va a enchufar.
Acabo de utilizarlo en una aplicación de programación, donde las tareas que se programarán están en ensamblajes separados, y el planificador no sabe nada sobre las tareas ... Recibe el nombre del ensamblado desde el que se define la tarea una fuente externa, y luego carga el ensamblaje dinámicamente, instancia una clase en ese ensamblado utilizando una interfaz bien definida. Un método de fábrica en el programador, que toma el nombre del ensamblado como un parámetro de entrada, devuelve una instancia de la clase en el ensamblaje cargado ...
.. pero hay tantos usos y maneras de usar ... esto patrón.
El patrón de fábrica es muy útil para asignar una capacidad a un controlador apropiado.
Supongamos que tiene una cola que contiene objetos del tipo task
.
Ahora, puede la subclase task
por varias razones. Si está cargando sus tareas desde alguna fuente como una base de datos, puede usar una fábrica para determinar qué tipo de tarea cargar.
Por ejemplo:
private IEnumerable<Task> GetTasks(DataTable Table){
Task NewTask;
foreach(DataRow Row in Table){
switch(tasktype){
case tasktypes.TaskTypeA:
NewTask = NewTaskA(...);
break;
case TaskTypes.TaskTypeB:
NewTask = NewTaskB(...);
break;
...
}
yield return NewTask;
}
}
Más tarde, a continuación, podría llamar a los métodos virtuales en las tareas en la cola, como "consumir" o "proceso", por ejemplo.
La ventaja del enfoque de fábrica (en este caso) es que solo tiene que activar el tipo de tarea una vez (cuando se crea la tarea) y dejar que el polimorfismo maneje casi todo lo demás.
Ciertamente, la necesidad de utilizar los detalles de implementación más dolorosos descritos por el patrón se eliminó gracias a la forma en que C# funciona, pero mi funcionalidad SQL DAL pasa alrededor de fábricas de objetos (y comandos SQL) a funciones de utilidad que usan las fábricas para generar objetos Si no estuviera usando C#, supongo que podría haber usado una clase de fábrica explícita que generara los objetos.
es decir, en uno de los 2 casos:
- su clase no se conoce el tipo de objeto que se quiere crear, pero sólo quiere un objeto que va a 'hacer el trabajo'. EMF salta a la mente ya que usa mucho este patrón.
- desea las subclases de su clase para determinar el tipo de objeto que se utilizará. es decir, si está escribiendo su clase para padres sin saber qué producto concreto se creará, será responsabilidad del creador concreto.
- 1. ¿Cuáles son los usos prácticos de un constructor protegido?
- 2. ¿Cuáles son los usos prácticos del módulo (%) en la programación?
- 3. ¿Cuáles son las diferencias entre los patrones Builder, Factory Method y Abstract Factory?
- 4. SQLite: ¿cuáles son los límites prácticos?
- 5. jQuery .each() - ¿Usos prácticos?
- 6. ¿Usos prácticos para tipos estructurales?
- 7. Factory Method
- 8. ¿Cuáles son los usos de buffer circular?
- 9. ¿Cuáles son los usos de svn copy?
- 10. ¿Cuáles son los usos comunes de UDP?
- 11. ¿Cuáles son los usos de Cross Join?
- 12. Usos prácticos de TypedReference
- 13. C# Factory Pattern
- 14. Usos prácticos para el "Patrón de plantilla curiosamente recurrente"
- 15. ¿Cuáles son algunos usos de los metadatos de Clojure?
- 16. Usos prácticos de MethodRental Class?
- 17. ¿Cuáles son los buenos usos de los módulos empaquetados OCaml?
- 18. ¿Cuáles son los usos de los tipos polimórficos?
- 19. ¿Cuáles son los diferentes usos de los [corchetes] en Ruby?
- 20. ¿Cuáles son algunos usos prácticos para las variables const const en C?
- 21. ¿Cuáles son algunos usos interesantes/prácticos para matrices con tres o más dimensiones?
- 22. ¿Cuáles son algunos de los usos inteligentes de LINQ?
- 23. ¿Cuáles son los mejores usos de las tiendas de documentos?
- 24. ¿Cuáles son los usos de la construcción C++ "placement new"?
- 25. ¿Cuáles son los usos de funciones virtuales puras en C++?
- 26. ¿Cuáles son los usos del código de auto modificación?
- 27. ¿Cuáles son los usos de las subrutinas lvalue en Perl?
- 28. Iron Python: cuáles son los buenos usos de Iron Python
- 29. ¿Cuáles son todos los usos de '@' en C#?
- 30. ¿Cuáles son los usos del predicado de falla en Prolog?
¿Todavía puede hacer lo mismo sin dedicar una clase para la creación de instancias? – BKSpurgeon