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?