miércoles, 20 de mayo de 2015

Factory Pattern

 

Problemática

Factory Patter quizá es el patrón mas usado en el desarrollo de software, su uso es básico para tener un control de instanciación dentro de nuestro código y facilitar el cambio de implementaciones.

Con el uso de interfaces en el desarrollo de software, se crea al menos una implementación de tal interface. Imaginemos un proyecto  mediano o grande, si no se tiene control de los lugares en los cuales se realiza la instanciación de las implementaciones, cuando se desee cambiar una implementación el trabajo será arduo y peligroso.

Por lo anterior es necesario centralizar la creación de instancias, de manera que podamos crear instancias desde un Factory, y si deseamos cambiar una implementación solo creamos la nueva implementación y cambiamos la instanciación en el Factory.

Implementación


Factory Implementation - UML Class Diagram


En el diagrama anterior podemos observar que Factory crea las instancias, de manera que solo dentro de las clases Factory debemos de tener "new".

1. Crea una interface que defina el contrato a cumplir la implementación.
2. Crea una implementación de la interface definida anteriormente.
3. En  clases que usen una instancia del tipo definido por la interface usa este tipo y no el tipo de la implementación.


Ejemplo


interface Figura {
    void dibuja();
}

class Triangulo implements Figura {
    @Override
    public void dibuja() {
        System.out.println("Soy un triangulo");
    }
}

class Circulo implements Figura {
    @Override
    public void dibuja() {
        System.out.println("Soy un circulo");
    }
}

class FactoryFormas {
    public static Figura getFigura(final String tipoFigura) {
        Figura figura = null;
        if (tipoFigura.equals("triangulo")) {
            figura = new Triangulo();
        } else {
            figura = new Circulo();
        }
        return figura;
    }
}

class MuestraFiguras {
    public void main(final String[] args) {
        Figura triangulo = FactoryFormas.getFigura("triangulo");
        Figura circulo = FactoryFormas.getFigura("circulo");
        triangulo.dibuja();
        circulo.dibuja();
    }
}

Referencias

http://www.oodesign.com/factory-pattern.html
http://www.tutorialspoint.com/design_pattern/factory_pattern.htm

No hay comentarios:

Publicar un comentario