17 thoughts on “[Patterns] Factory Method Explicado

  1. buenisimo en la facu tengo diseño y patrones y desde el uml no los entiendo ni me quedan claro para que sirven pero a este lo entendi bien ya es uno menos.
    falta un codigo no? lo espero?

  2. Hola pbuglio, gracias por comentar. Me alegro que te sirva, para eso mismo lo hago.

    En cuanto a tu pregunta, la respuesta es: no. No pondré código porque se lo puede encontrar en cualquier parte, no así una explicación en video.

    Saludos.

  3. Hola Lucas, una duda, si mis factorias no tienen necesidad de crear objectos, solo uno…
    Podria usar este codigo

    public IServicePayment GetService(typeService type)
    {
    switch (type)
    {
    case typeService.Tipo1:
    return ImplementacionTipo1;
    break;
    case typeService.PayPal:
    return ImplementacionPayPal;
    break;

    }
    }
    Como ves? las objectos q devuelvo implementan todos el interfaz IServicePayment, estos no crean objecto ni nada por el estilo.
    Seria correcto?
    Gracias

  4. Hola Carlos. Entiendo que lo que haces NO es correcto en el contexto de esta entrada Factory Method».
    Lo digo porque las factorias (todas) son patrones de «creaci’on» de objetos y en este caso no se estan creando, mas bien parece una especie de mapping de objetos mas parecido a un cacheo o pool que a una factoria.

    Lo que me resulta muy extraño es el echo de que esos objetos ya existan (una instancia de cada uno) y no se creen nuevas instancias. Porque si es as’i, por qu’e no invocarlos por nombre directamente o incluirlos en un dictionary:
    (obj1.Type.ToString(), obj1),
    (obj2.Type.ToString(), obj2)

    Pero bueno, todo depende realmente de lo que quieras hacer. Si no vas a crear nuevas instancias, o mejor dicho, si es importante impedir que se creen nuevas instancias de estos objetos deberian ser singletones y ser invocados por nombre.

    Saludos.

  5. Gracias Lucas, lo siento es q no encontre como ponerme en contacto contigo, perdona de nuevo.

    Buscando en internet, he encontrado varios post como este (parecidos a lo q puse antes)

    http://aspalliance.com/809_Working_with_Factory_Design_Patte
    rn_using_C

    Despues encuentras otros como el de tu explicación(que será lo correcto sin duda) 🙂

    http://aspalliance.com/1751_Exemplifying_the_Factory_Method_Pattern_inside_the_NET_Framework.all#Page5

    Una de las cosas q no entiendo bien es como crear la factoria global q te devuelva el objecto ya construido sin necesidad de parametros(ImageDocument, WordDocument)

    Es decir

    IDocument doc = Factory.GetDocument();

    // Si a este metodo no le paso un parametro, como puede saber q instacia de factoria necesita para crear el Idocument especifica para el tipo de objeto.

    Gracias 😉

  6. Carlos, los dos links que pones explican factorias. Al primero se lo conoce como «Simple Factory» y al segundo como «Factory Method», los dos son correctos y cada uno sirve a un propósito distinto aunque parecido.

    Bien, tienes razón, el soft no puede adivinar que es lo que quieres crear así que o se lo dices en un parámetro o el lo sabe por alguna lógica o estado interno.

    Te recomiendo que no te ahogues, primero hazlo y luego de que lo tengas funcionando intenta refactorizarlo. Eso suele dar resultados.

    Saludos.

  7. Hola Lucas:
    Te cuento que estoy necesitando hacer un trabajo para la facultad y tengo que hacer la presentación del Patron Factory, el tema es que necesito las clases con su código en java, para mostrarlo funcionalmente en clase, para el jueves de la semana próxima. Tendría que ser con un claro ejemplo para que el resto de la clase comprenda perfectamente cual es el objetivo de dicho patron. Necesito que me digas si sabes donde puedo obtener la ayuda que necesito, ya que yo no me siento con la capacidad necesaria para armar el código completo y funcione.
    Otra consulta es, en que caso de uso de la vida cotidiana de un sistema se utilizaría el FACTORY.
    Desde ya muchas gracias. El video tuyo es genial, super bien explicado y gracias a ese video logre comprender bastante el concepto de este patron, pero aún quedan muchas dudas.

  8. Hola Javier:

    La ayuda que necesitas la vas ha encontrar sin duda alguna en google. Prueba con «factory pattern java» te va a arrojar mas de 7.000.000 de resultados.

    En cuanto a la segunda pregunta, depende de que factory estemos hablando. Si estamos hablando de un Factory Method, un buen ejemplo está disponible en el video qde esta misma entrada.

    Yo te diria que si no entiendes muy bien este u otros patrones te des una vuelta por wikipedia en donde las explifcaciones son por lo general muy sencillas.

    Saludos

  9. Hola Lucas,
    Muchas gracias por todos tus consejos.
    Quiero contarte que ya pude armar mi ejemplo en Java con algo que conseguí en internet, pero no logro hacerlo funcionar, te dejo mi correo asi puedes enviarme el tuyo y ahí yo te reenviaría el mail con el proyecto.java comprimido en RAR.
    Es la única manera que se me ocurre que puedas ayudarme a la distancia.
    Si no podes, desde ya muchas gracias igual, por la ayuda previa.
    Correo: javpol2004@hotmail.com
    Un cordial saludo.

  10. Hola Lucas,
    navegando en Wiki encontre el enlace a esta pagina donde se hace referencia a un video sobre patrones, particularmente el de Factorias.
    Me podrias indicar si el video esta disponible desde otra ubicacion?, ya que al ingresar a esta pagina no puedo visualizarlo.
    Desde ya muchas gracias.

  11. Estimado Lucas, primero que todo decirte que el video es bastante aclarativo y educativo. Ahora, me gustaría preguntarte que versión de Visual Studio 2008 o superior usas porque me llamó mucho la atención la barra de herramientas que usas para realizar los modelos con UML, tengo entendido que existe una versión Architecture Edition, de antemano muchas gracias.

    Saludos,
    Juan José

  12. Hola Juan José, sinceramente no recuerdo el nombre del add in con el que hice este video. Solo puedo decirte que no es vs.2008 solamente.
    Saludos

Responder a pbuglio Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *