Cleibson Gomes

Desvendando o Abstract Factory Pattern em Java

Neste artigo, vamos mergulhar profundamente em um dos padrões de projeto mais usados, o Abstract Factory Pattern. Usaremos exemplos práticos em Java para facilitar o entendimento.

O Abstract Factory Pattern é um padrão de design criacional que fornece uma maneira de encapsular um grupo de fábricas individuais que têm um tema comum sem especificar suas classes concretas. Em termos mais simples, o Abstract Factory é um super-factory que cria outros factories.

Vamos usar o exemplo de uma loja de móveis para ilustrar o Abstract Factory Pattern. Suponha que existam duas fábricas principais, a 'Fábrica de Móveis Modernos' e a 'Fábrica de Móveis Vitorianos'. Ambas as fábricas produzem os mesmos tipos de móveis (cadeira, sofá, mesa), mas em estilos diferentes.

Primeiro, criamos uma interface para nossos produtos:

public interface Cadeira {
    void temPernas();
    void sentar();
}

public interface Sofa {
    void temPernas();
    void deitar();
}

public interface Mesa {
    void temPernas();
    void usar();
}

Em seguida, criamos classes concretas de produtos para os diferentes estilos de móveis:

public class CadeiraModerna implements Cadeira {
    @Override
    public void temPernas() {
        System.out.println("A cadeira moderna tem quatro pernas de metal.");
    }
    @Override
    public void sentar() {
        System.out.println("A cadeira moderna é muito confortável!");
    }
}
// Faça o mesmo para SofaModerno e MesaModerna

public class CadeiraVitoriana implements Cadeira {
    @Override
    public void temPernas() {
        System.out.println("A cadeira vitoriana tem quatro pernas ornamentadas.");
    }
    @Override
    public void sentar() {
        System.out.println("A cadeira vitoriana é muito elegante!");
    }
}
// Faça o mesmo para SofaVitoriano e MesaVitoriana

Agora, vamos ao Abstract Factory:

public interface MovelFactory {
    Cadeira criarCadeira();
    Sofa criarSofa();
    Mesa criarMesa();
}

Agora, vamos ao Abstract Factory:

public class ModernoFactory implements MovelFactory {
    @Override
    public Cadeira criarCadeira() {
        return new CadeiraModerna();
    }
    @Override
    public Sofa criarSofa() {
        return new SofaModerno();
    }
    @Override
    public Mesa criarMesa() {
        return new MesaModerna();
    }
}

public class VitorianoFactory implements MovelFactory {
    @Override
    public Cadeira criarCadeira() {
        return new CadeiraVitoriana();
    }
    @Override
    public Sofa criarSofa() {
        return new SofaVitoriano();
    }
    @Override
    public Mesa criarMesa() {
        return new MesaVitoriana();
    }
}

Conclusão

O Abstract Factory Pattern nos permite abstrair a criação de um conjunto de produtos relacionados, permitindo fácil substituição de fábricas, cumprindo o princípio da substituição de Liskov. Assim, podemos mudar facilmente o estilo dos móveis da nossa loja sem mudar o código que os utiliza. Essa abstração e flexibilidade tornam o Abstract Factory Pattern uma escolha popular para muitos desenvolvedores Java.

Espero que este artigo tenha esclarecido o padrão de design da Abstract Factory em Java para você. Fique à vontade para deixar seus comentários ou perguntas, e estou ansioso para continuar esta discussão!

blog@nosbielc.com

Made with ❤️ in Quebec, CA.