2010-03-26 17 views
30

Veo la palabra a menudo, y puede que la haya usado yo mismo en código y bibliotecas a lo largo del tiempo, pero nunca la obtuve. En la mayoría de los reportajes que encontré, solo esperaban que lo averiguaras.¿Qué es exactamente una Fábrica de clases?

¿Qué es una Fábrica de Clase? ¿Alguien puede explicar el concepto?

Respuesta

12

Una fábrica de clases construye instancias de otras clases. Normalmente, las clases que crean comparten una clase base o interfaz común, pero se devuelven las clases derivadas.

Por ejemplo, usted podría tener un generador de clases que tuvo una cadena de conexión de base de datos y devuelve una clase que implementa IDbConnection como SqlConnection (clase y la interfaz de .Net)

5

Una fábrica de clases es un método que (según algunos parámetros, por ejemplo) le devuelve una clase personalizada (¡no instanciada!).

1

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 la fábrica] aborda el problema de la creación objetos (productos), sin especificar la clase exacta del objeto que va a ser creado . El método de fábrica diseño patrón maneja este problema por definir un método independiente para creación de los objetos, que subclases entonces puede anular para especificar el tipo derivado de producto que será creado. De manera más general, el término método de fábrica se usa a menudo para referirse a a cualquier método cuyo objetivo principal sea la creación de objetos .

http://en.wikipedia.org/wiki/Factory_method_pattern

Disculpas si ya ha leído esto y nos pareció que era insuficiente.

1

El artículo de Wikipedia da una definición bastante buena: http://en.wikipedia.org/wiki/Factory_pattern

Pero probablemente la definición más autorizada se encuentre en el Design Patterns libro de Gamma et al. (comúnmente llamado el Libro de la Banda de los Cuatro).

25

Heres es un poco de 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 parámetros de entrada o contexto global. Esto es necesario cuando el tipo tipo del 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 pueden pasarse y manipularse, a menudo se puede lograr un resultado similar simulando "constructores virtuales". donde llamas a un constructor de clase base pero recuperas una instancia de alguna clase derivada.Esto debe simularse porque los constructores realmente no pueden ser virtual en C++, por lo que tales fábricas de objetos y no de clase generalmente se implementan como funciones independientes o métodos estáticos.

funciones virtuales se resuelven normalmente "late" por el tipo real de objeto referenciado, pero en el caso de constructores, el objeto no existe, sin embargo, por lo que el tipo deben ser determinados por algún otro medio.

Las mejores implementaciones son aquellas que manejan nuevas clases candidatas automáticamente cuando se agregan en lugar de tener un determinado conjunto finito actualmente codificado en la fábrica (aunque la compensación suele ser 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 dichos constructores virtuales genéricos en C++. Hay formas incluso mejores de hacerlo con C++ templates, pero eso no estaba cubierto en el libro antes de que se agregue a la definición del lenguaje estándar. De hecho, las plantillas C++ en sí mismas son fábricas de clases, ya que instancian una nueva clase siempre que se utilicen 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 en su libro en forma de patrón de diseño al estilo 1994 Design Patterns: Elements of Re-Usable Object-Oriented Software libro. Tenga en cuenta especialmente la sección Virtual Constructor (que usa su estructura de patrón Envelope/Letter).

Consulte también las respuestas relacionadas aquí para la pregunta Class factory in Python. También vea Abstract Factory, Template Style que es un artículo del Dr. Dobb de 2001 también sobre implementarlos con Plantillas de C++.