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 criar software. Em vez de reinventar a roda a cada vez, você pode aplicar esses modelos testados ao longo do tempo para resolver desafios recorrentes de design.

Pense nos padrões de projeto como plantas. Eles não fornecem código pronto para você 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á aproveitam os conceitos de OOP que você já domina: herança, interfaces, polimorfismo e composição.

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

CategoriaFinalidadeExemplos
De criaçãoComo os objetos são criadosSingleton, Factory, Builder
EstruturaisComo os objetos são compostosAdapter, Decorator, Composite
ComportamentaisComo os objetos se comunicamObserver, Strategy, Command

Por que aprender padrões de projeto? Eles fornecem um vocabulário compartilhado com outros desenvolvedores: dizer "use uma Factory aqui" comunica instantaneamente uma ideia complexa. Eles também ajudam você a escrever um código mais flexível e fácil de manter, aplicando 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 pelos 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 criar um classificador simples de padrões que demonstra sua compreensão das três categorias de padrões de projeto! Você criará um sistema que categoriza os padrões e explica sua finalidade, 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 a finalidade.

    StructuralPattern - deve retornar "Structural" para a categoria e "How objects are composed" para a finalidade.

    BehavioralPattern - deve retornar "Behavioral" para a categoria e "How objects communicate" para a finalidade.

  • Main.java: Reúna seu classificador de padrões! Você receberá uma entrada: o nome de um padrão (String), que será um dos seguintes: "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 a seguir:

    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 a principal ideia 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 pratica o princípio de "programar para uma interface, não para uma implementação" — um conceito fundamental que torna os padrões de projeto tão poderosos!

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 criacionais
        // - "Adapter" e "Decorator" são padrões estruturais
        // - "Observer" e "Strategy" são padrões comportamentais
        
        // TODO: Imprima a saída no seguinte formato:
        // Pattern: [nome do padrão de entrada]
        // Category: [categoria de getCategory()]
        // Purpose: [propósito 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

Pratique por conta própria: Compilador de Java online