Cómo sabe una fábrica qué tipo de objeto crear?

Creo que el patrón de diseño del método de fábrica es apropiado para lo que estoy tratando de hacer, pero no estoy seguro de cuánta responsabilidad (conocimiento de subclases crea) para darle. El ejemplo del uso de patrón de método de fábrica en Wikipedia describe la situación en la que estoy casi exactamente:

public class ImageReaderFactory 
{
    public static ImageReader getImageReader( InputStream is ) 
    {
        int imageType = figureOutImageType( is );

        switch( imageType ) 
        {
            case ImageReaderFactory.GIF:
                return new GifReader( is );
            case ImageReaderFactory.JPEG:
                return new JpegReader( is );
            // etc.
        }
    }
}

Mi pregunta es, ¿qué hace elfigureOutImageType función parece? En este ejemplo específico, asumiría que verifica un encabezado de archivo enInputStream para determinar en qué formato de imagen están los datos. Me gustaría saber si laImageReaderFactory sí sabe cómo analizar encabezados de archivos y determinar si el tipo de archivo es GIF, JPEG, etc., o si llama a una función dentro de cadaReader clase que le permite saber qué tipo de imagen es. Algo como esto, tal vez:

int figureOutImageType(InputStream is)
{
    if(GifReader.isGIF(is))
        return ImageReaderFactory.GIF;
    else if(JpegReader.isJPEG(is))
        return ImageReaderFactory.JPEG;
    // etc.
}

Parece que hacer que la fábrica sepa cómo analizar imágenes rompe la encapsulación, y dejar que las subclases decidan cuál se debe crear es parte del patrón de diseño del método de fábrica. Sin embargo, también parece que lafigureOutImageTypea función @ solo agrega un código redundante, porque ¿por qué no hacer que cada subclase realice su verificación en laInputStream en elgetImageReader función y omitir la caja del interruptor?

No he tenido ninguna experiencia en el uso de fábricas antes, y esperaba obtener información de algunas personas que las han usado en el pasado sobre la mejor manera de manejar este problema. ¿Está bien que la fábrica conozca el funcionamiento interno de sus subclases, o deberían ser responsables de informarle a la fábrica qué crear y cómo organizarlo todo?

¡Gracias

Respuestas a la pregunta(5)

Su respuesta a la pregunta