Menu
Coddy logo textTech

Introdução aos Padrões de Projeto

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 64 de 87.

Padrões de projeto são soluções comprovadas para problemas comuns que os desenvolvedores encontram repetidamente ao construir software. Em vez de reinventar a roda a cada vez, você pode aplicar esses modelos testados pelo tempo para resolver desafios de design recorrentes.

Pense em padrões de projeto como plantas. Eles não fornecem código pronto para copiar e colar, mas descrevem como estruturar suas classes e objetos para resolver um tipo específico de problema. Os padrões que você aprenderá utilizam os conceitos de POO que você já domina — herança, interfaces, polimorfismo e composição.

Os padrões de projeto se dividem em três categorias principais:

CategoriaPropósitoExemplos
CriacionalComo os objetos são criadosSingleton, Factory, Builder
EstruturalComo os objetos são compostosAdapter, Decorator, Composite
ComportamentalComo os objetos se comunicamObserver, Strategy, Command

Por que aprender padrões de projeto? Eles oferecem um vocabulário compartilhado com outros desenvolvedores — dizer "use uma Factory aqui" comunica instantaneamente uma ideia complexa. Eles também ajudam você a escrever código mais flexível e fácil de manter ao aplicar princípios como "programe para uma interface, não para uma implementação".

Nas próximas lições, você implementará vários padrões essenciais, começando com padrões de criação como Singleton e Factory, e depois passando para padrões comportamentais como Observer e Strategy.

challenge icon

Desafio

Fácil

Vamos construir um classificador de padrões simples que demonstra sua compreensão das três categorias de padrões de projeto! Você criará um sistema que categoriza padrões e explica seu propósito, organizando seu código em vários arquivos.

Você criará três arquivos:

  • Pattern.java: Crie uma interface chamada Pattern que define o contrato para todos os padrões de projeto. Sua interface deve declarar dois métodos: String getCategory() que retorna a categoria do padrão (Creational, Structural, ou Behavioral), e String getPurpose() que retorna uma descrição do que essa categoria de padrões faz.
  • PatternInfo.java: Crie três classes que implementam sua interface Pattern, cada uma representando uma categoria de padrões de projeto:

    CreationalPattern - deve retornar "Creational" para a categoria e "How objects are created" para o propósito.

    StructuralPattern - deve retornar "Structural" para a categoria e "How objects are composed" para o propósito.

    BehavioralPattern - deve retornar "Behavioral" para a categoria e "How objects communicate" para o propósito.

  • Main.java: Reúna seu classificador de padrões! Você receberá uma entrada: um nome de padrão (String) que será um de "Singleton", "Factory", "Adapter", "Decorator", "Observer", ou "Strategy".

    Com base na entrada, crie o objeto de padrão apropriado:

    • "Singleton" e "Factory" são padrões Creational
    • "Adapter" e "Decorator" são padrões Structural
    • "Observer" e "Strategy" são padrões Behavioral

    Armazene seu objeto de padrão em uma variável do tipo Pattern (a interface), demonstrando o princípio de programar para uma interface. Em seguida, imprima as três linhas seguintes:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

Você receberá uma entrada: o nome de um padrão de projeto (String).

Este desafio reforça o insight principal da lição: os padrões de projeto são organizados em categorias com base no problema que resolvem. Ao usar uma interface, você também está praticando o princípio de "programar para uma interface, não para uma implementação" - um conceito central que torna os padrões de projeto tão poderosos!

Folha de consulta

Padrões de projeto (Design patterns) são soluções comprovadas para problemas comuns no desenvolvimento de software. Eles são modelos que descrevem como estruturar classes e objetos para resolver tipos específicos de problemas.

Os padrões de projeto se dividem em três categorias principais:

CategoriaObjetivoExemplos
CriacionaisComo os objetos são criadosSingleton, Factory, Builder
EstruturaisComo os objetos são compostosAdapter, Decorator, Composite
ComportamentaisComo os objetos se comunicamObserver, Strategy, Command

Os padrões de projeto fornecem um vocabulário compartilhado entre os desenvolvedores e ajudam a escrever códigos mais flexíveis e fáceis de manter, aplicando princípios como "programar para uma interface, não para uma implementação".

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: Declare uma variável do tipo Pattern (a interface)
        Pattern pattern = null;
        
        // TODO: Com base em patternName, crie o objeto de padrão apropriado:
        // - "Singleton" e "Factory" são padrões Creational
        // - "Adapter" e "Decorator" são padrões Structural
        // - "Observer" e "Strategy" são padrões Behavioral
        
        // TODO: Imprima a saída no seguinte formato:
        // Pattern: [input pattern name]
        // Category: [category de getCategory()]
        // Purpose: [purpose de getPurpose()]
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos