Fábrica, Fábrica abstracta y Método de fábrica
-
21-09-2019 - |
Pregunta
Estoy realmente confundido acerca de estos tres términos.
Mi entendimiento es que:
en el patrón Fábrica, no hay ninguna fábrica concreta.La fábrica construye los nuevos objetos según los parámetros.
En el patrón Abstract Factory, hay varias fábricas concretas.El cliente tiene que crear explícitamente diferentes fábricas de hormigón.
¿Está bien?
¿Cuáles son las otras diferencias?
Además, ¿qué es el patrón Factory Method?¿Es igual que el patrón Factory?
Solución
La Banda De Los Cuatro "Patrones De Diseño;El libro "Elementos de software orientado a objetos reutilizables" contiene dos entradas, "Abstract Factory" (también conocido como 'Virtual Constructor') y "Factory Method"...No sé sobre "Fábrica concreta". He escuchado el término pero nunca pensé demasiado.
Método de fábrica
En el "Método de fábrica", un objeto tiene un método que es responsable de la creación de instancias de otro objeto.Un ejemplo común sería el objeto de documento JavaScript y la creación de HtmlElement
objetos:
var newDiv = document.createElement('div');
Sin embargo, este no es un gran ejemplo, ya que una parte importante del método Factory es el polimorfismo.Si pudiera extender document
para definir otra clase que define otra createElement
este sería el material principal del Método de Fábrica.
Fábrica abstracta
Una fábrica abstracta pretende "proporcionar una interfaz para crear familias de objetos relacionados o dependientes sin especificar clases concretas.
El típico ejemplo sacado del libro es una fábrica de widgets;En la época en que se publicó GoF, el desarrollo de GUI multiplataforma era un poco complicado, por lo que se podía definir una clase de fábrica de widgets abstracta.
Esa clase podría tener métodos. createWindow
, createButton
, createScrollBar
etc.A su vez, se definirían varias implementaciones para producir widgets Swing o AWT o lo que sea.Luego, dependiendo de la configuración, se creará una instancia de la clase diferente.
Anexo - Fábrica de Concreto
Creo que Concrete Factory es cualquier implementación no abstracta de Abstract Factory o método Factory.
Entonces, cuando escribo mi propia generalización de document
que anula createElement
, la clase que creo es Concrete Factory.
Asimismo, mientras WidgetFactory
sería una Fábrica Abstracta, SwingWidgetFactory
Sería una fábrica de hormigón.
Otros consejos
La mejor manera de aprender es definitivamente para leer. Echar un vistazo a esto: http://www.dofactory.com/Patterns/Patterns.aspx .
creación de aplazar método de fábrica de objetos a clases sub. Esto significa que una clase / interfaz base se define obstante código de cliente no crea un objeto contra esta interfaz. sub clases que implementan la interfaz se dejan para inicializar un objeto.
fábricas abstractas se pueden encontrar aquí: http://www.dofactory.com/ patrones / PatternAbstract.aspx # _self2
Ya existe una buena información sobre ese sitio. La segunda mejor opción es comprobar wiki:
http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
http://javadesign-patterns.blogspot.com/ es un buen lugar para aprender patrones de diseño
FÁBRICA PATRÓN: devuelve objetos de una misma familia
RESUMEN DE FÁBRICA:. Devuelve objetos de más de una familia
Por lo que puede decir Abstract Factory contiene más de una fábrica