0Pricing
Java Academy · Aula

Padrão Factory Method

Defina um método de fábrica em uma classe-base e permita que as subclasses decidam qual produto criar.

Padrão Factory Method é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

A intenção do Método de Fábrica

O Método de Fábrica define uma interface para criar um objeto, mas permite que as subclasses decidam qual classe instanciar. Ele desacopla a lógica de criação do código cliente.

O problema sem o Método de Fábrica

Sem uma fábrica, o código cliente fica repleto de chamadas new ConcreteClass(). Adicionar uma nova variante significa alterar todos os pontos de chamada — uma violação do Princípio Aberto/Fechado.

// Client knows too much:
Shape shape;
if (type.equals("circle")) shape = new Circle(r);
else if (type.equals("rect")) shape = new Rectangle(w, h);
// Every new shape requires editing this code.

A classe criadora abstrata

Defina uma classe criadora abstrata com um método de fábrica createProduct(). As subclasses o sobrescrevem para retornar tipos específicos de produto.

public abstract class Dialog {
    public void render() {
        Button btn = createButton(); // factory method
        btn.onClick();
    }
    protected abstract Button createButton();
}

Criadores concretos

Cada subclasse sobrescreve o método de fábrica para retornar o produto apropriado sem alterar o algoritmo ao redor na classe base.

public class WindowsDialog extends Dialog {
    @Override
    protected Button createButton() { return new WindowsButton(); }
}
public class WebDialog extends Dialog {
    @Override
    protected Button createButton() { return new HtmlButton(); }
}

A interface do produto

Todos os produtos concretos implementam uma interface comum para que o criador possa trabalhar com eles de forma genérica.

public interface Button {
    void onClick();
    void render();
}
public class WindowsButton implements Button {
    public void onClick() { System.out.println("Windows click"); }
    public void render() { System.out.println("Render Windows button"); }
}

Métodos de fábrica estáticos versus o padrão Método de Fábrica

Um método de fábrica estático (por exemplo, LocalDate.of()) é uma convenção de nomenclatura, não o padrão da GoF. O padrão da GoF usa herança; as fábricas estáticas usam métodos estáticos em uma única classe.

// Static factory (NOT the GoF pattern)
LocalDate d = LocalDate.of(2024, 6, 15);
// GoF Factory Method uses a class hierarchy

Método de Fábrica parametrizado

Passe um parâmetro ao método de fábrica para escolher entre vários produtos sem exigir uma subclasse para cada produto.

public class ShapeFactory {
    public static Shape create(String type, double... dims) {
        return switch (type) {
            case "circle"    -> new Circle(dims[0]);
            case "rectangle" -> new Rectangle(dims[0], dims[1]);
            default -> throw new IllegalArgumentException("Unknown: " + type);
        };
    }
}

Método de Fábrica com genéricos

Utilize genéricos para tornar o método de fábrica seguro quanto aos tipos e reutilizável entre diferentes famílias de produtos.

public abstract class Repository<T, ID> {
    public abstract T findById(ID id);
    protected abstract T createEmpty(); // factory method
}

Registrando fábricas com um mapa

Uma fábrica baseada em registro armazena um mapa de strings de tipo para expressões lambda Supplier, evitando cadeias de if-else e tornando o registro dinâmico.

Map<String, Supplier<Notification>> registry = new HashMap<>();
registry.put("email", EmailNotification::new);
registry.put("sms",   SmsNotification::new);
Notification n = registry.getOrDefault(type, DefaultNotification::new).get();

Método de Fábrica versus Fábrica Abstrata

O Método de Fábrica cria um tipo de produto por meio de herança. A Fábrica Abstrata cria famílias de produtos relacionados por meio de composição. Utilize o Método de Fábrica quando um produto variar; utilize a Fábrica Abstrata quando uma suíte inteira variar em conjunto.

Exemplo do mundo real: fábrica de Logger

A LoggerFactory.getLogger(Class) da SLF4J é uma fábrica estática que retorna a implementação correta de Logger (Logback, Log4j, JUL) sem que o chamador saiba qual é.

Logger log = LoggerFactory.getLogger(MyService.class);
log.info("Service started");

Verificação rápida

Qual é a principal característica do padrão Método de Fábrica?

Recapitulação

O Método de Fábrica desacopla a criação de objetos do cliente, colocando a decisão de instanciação em métodos substituíveis das subclasses. Utilize-o quando uma classe não puder antecipar quais objetos precisará criar.

Perguntas Frequentes

A aula “Padrão Factory Method” é grátis?

Sim — o texto completo de “Padrão Factory Method” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Padrão Factory Method”?

Defina um método de fábrica em uma classe-base e permita que as subclasses decidam qual produto criar. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Padrão Factory Method”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Singleton: Implementações Seguras para Threads
  2. Padrão Factory Method
  3. Abstract Factory para Famílias de Produtos
  4. Padrão Builder com API Fluente
← Voltar para Java Academy