Em java, podemos exemplificar o factory da seguinte maneira:

public interface AbstractFormFactory {
    public Form createForm();
}

public interface Form {
    public void Show();
}

public class WindowsFormFactory implements AbstractFormFactory {
    public Form createForm() {
        return new WindowsForm();
    }
}

public class WindowsForm implements Form {
    public WindowsForm() {
        // algum código windows aqui
    }

    @Override
    public void Show() {
        // algum código windows aqui      
    }
}

public class MotifFormFactory implements AbstractFormFactory {
    public Form createForm() {
        return new MotifForm();
    }
}

public class MotifForm implements Form {
    public MotifForm() {
        // algum código motif aqui
    }

    @Override
    public void Show() {
        // algum código motif aqui
    }
}

public class Programa {
    public static void main(String[] args) {
        AbstractFormFactory fabricaEscolhida;
        if (args[1] == "Windows") {
            fabricaEscolhida = new WindowsFormFactory();
        }
        else  
        {
            fabricaEscolhida = new MotifFormFactory();
        }
        
        // criar janelas
        Form meuForm1 = fabricaEscolhida.createForm();
        Form meuForm2 = fabricaEscolhida.createForm();
        Form meuForm3 = fabricaEscolhida.createForm();
        Form meuForm4 = fabricaEscolhida.createForm();
    }
}

Observe o programa principal Programa. Escolhemos uma fábrica e não nos preocupamos mais no código se o formulário a ser exibido é no layout Windows ou Motif. Se no futuro quisermos adicionar um novo layout (tipo LayoutDiferente), basta implementarmos duas classes: DiferenteForm e DiferenteFormFactory, e todo o restante do sistema estará compatível com este novo layout.

Facilita ou não facilita a manutenção?

Copyright © 2014 AIEC.