class - triangulo - ¿Qué es exactamente una Fábrica de clases?
patrón de diseño factory method (5)
Veo la palabra difundida a menudo, y es posible que la haya usado en código y bibliotecas a lo largo del tiempo, pero realmente nunca la entendí. En la mayoría de los escritos que encontré, seguían esperando que lo averiguaras.
¿Qué es una fábrica de clase? ¿Alguien puede explicar el concepto?
Aquí hay una pequeña información adicional que puede ayudar a comprender mejor algunas de las otras respuestas técnicamente correctas, pero más cortas.
En el sentido más estricto, una Class Factory es una función o método que crea o selecciona una clase y la devuelve, en función de alguna condición determinada a partir de los parámetros de entrada o el contexto global. Esto es necesario cuando el tipo de objeto necesario no se puede determinar hasta el tiempo de ejecución. La implementación se puede hacer directamente cuando las clases son en sí mismas objetos en el lenguaje utilizado, como Python.
Dado que el uso principal de cualquier clase es crear instancias de sí mismo, en lenguajes como C ++ donde las clases no son objetos que se pueden pasar y manipular, a menudo se puede obtener un resultado similar simulando "constructores virtuales", donde se llama a constructor de clase base pero recupera una instancia de alguna clase derivada. Esto debe simularse porque los constructores realmente no pueden ser virtual ✶ en C ++, razón por la cual las fábricas de objetos, no de clases, generalmente se implementan como funciones independientes o métodos estáticos.
Functions Las funciones virtuales normalmente se resuelven " late " por el tipo real de objeto referenciado, pero en el caso de los constructores, el objeto todavía no existe, por lo que el tipo debe determinarse por otros medios.
Las mejores implementaciones son aquellas que manejan nuevas clases candidatas automáticamente cuando se agregan, en lugar de tener solo un determinado conjunto finito actualmente codificado en la fábrica (aunque la compensación es a menudo aceptable si la fábrica es el único lugar que requiere modificación).
El libro de James Coplien de 1991, Advanced C ++: Programming Styles and Idioms, tiene detalles sobre una forma de implementar tales constructores genéricos virtuales en C ++. Hay incluso mejores formas de hacerlo utilizando plantillas de C ++ , pero eso no se trató en el libro que precede su adición a la definición de idioma estándar. De hecho, las plantillas de C ++ en sí mismas son fábricas de clases, ya que crean instancias de una nueva clase cada vez que se usan con diferentes argumentos de tipo real. Actualización: localicé un documento de 1998 que escribió para EuroPLoP titulado C ++ Idioms donde, entre otras cosas, revisa y reagrupa los modismos de su libro en forma de patrón de diseño de los patrones de diseño de 1994 : elementos de software reutilizable orientado a objetos. libro. Tenga en cuenta especialmente la sección Virtual Constructor (que utiliza su estructura de patrón Envelope/Letter ).
Vea también las respuestas relacionadas aquí para la pregunta Clase de fábrica en Python . También vea Abstract Factory, Template Style, que es un artículo del Dr. Dobb de 2001, también sobre cómo implementarlas con C ++ Templates.
El artículo de Wikipedia da una buena definición: http://en.wikipedia.org/wiki/Factory_pattern
Pero probablemente la definición más autorizada se encuentre en el libro Design Patterns de Gamma et al. (comúnmente llamado el libro de la pandilla de cuatro).
Sentí que esto lo explica bastante bien (para mí, de todos modos). Las fábricas de clase se usan en el patrón de diseño de fábrica, creo.
Al igual que otros patrones de creación, [el patrón de diseño de fábrica] aborda el problema de crear objetos (productos) sin especificar la clase exacta de objeto que se creará. El patrón de diseño del método de fábrica maneja este problema definiendo un método separado para crear los objetos, que las subclases pueden reemplazar para especificar el tipo de producto derivado que se creará. De manera más general, el término método de fábrica se usa a menudo para referirse a cualquier método cuyo objetivo principal sea la creación de objetos.
http://en.wikipedia.org/wiki/Factory_method_pattern
Disculpas si ya has leído esto y has encontrado que es insuficiente.
Una fábrica de clases construye instancias de otras clases. Normalmente, las clases que crean comparten una clase base o interfaz común, pero las clases derivadas se devuelven.
Por ejemplo, podría tener una fábrica de clases que tomó una cadena de conexión de base de datos y devolvió una clase que implementa IDbConnection
como SqlConnection
(clase e interfaz de .Net)
Una fábrica de clases es un método que (de acuerdo con algunos parámetros, por ejemplo) le devuelve una clase personalizada (¡no instanciada!).