Menu
Coddy logo textTech

Introdução aos Padrões de Projeto

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 70 de 91.

Padrões de design são soluções comprovadas para problemas comuns que desenvolvedores encontram repetidamente ao criar software. Em vez de reinventar a roda a cada vez, você pode aplicar esses modelos consolidados para resolver desafios semelhantes em seu próprio código.

Pense nos padrões de projeto como receitas. Assim como um chef segue uma receita para criar um prato aperfeiçoado ao longo do tempo, os desenvolvedores usam padrões de projeto para estruturar seu código de maneiras que foram testadas e refinadas por inúmeros programadores antes deles.

Os padrões de projeto geralmente são agrupados em três categorias:

Categoria Finalidade Exemplos
Criação Como os objetos são criados Singleton, Factory
Estrutural Como os objetos são compostos Adapter, Decorator
Comportamental Como os objetos se comunicam Observer, Strategy

Na verdade, você tem usado padrões ao longo de todo este curso sem perceber. Quando criou classes abstratas com métodos que as classes filhas devem implementar, você estava aplicando uma forma do padrão Template Method. Quando usou interfaces para definir contratos, estava preparando o terreno para o padrão Strategy.

Aprender padrões de projeto oferece a você um vocabulário compartilhado com outros desenvolvedores. Em vez de explicar detalhadamente uma estrutura complexa, você pode simplesmente dizer "usei o padrão Factory aqui", e desenvolvedores experientes entenderão imediatamente sua abordagem. Nas lições a seguir, implementaremos vários padrões essenciais em PHP.

challenge icon

Desafio

Fácil

Vamos criar um sistema simples de formatação de mensagens que demonstra como os padrões de projeto ajudam a organizar o código. Você identificará a qual categoria de padrão cada componente pertence e verá como diferentes partes de um sistema trabalham juntas.

Você organizará seu código em três arquivos:

  • MessageFormatter.php: Crie uma interface chamada MessageFormatter que define um contrato para formatar mensagens. Ela deve ter um único método format(string $message): string. Isso representa a categoria comportamental. Ela define como os objetos se comunicam e processam dados.
  • Formatters.php: Inclua o arquivo MessageFormatter e crie duas classes que implementam a interface:
    • UppercaseFormatter: Seu método format() retorna a mensagem convertida para maiúsculas
    • BracketFormatter: Seu método format() envolve a mensagem em colchetes, como [message]
  • main.php: Inclua o arquivo Formatters. Você receberá duas entradas: uma string de mensagem e um tipo de formatador ("upper" ou "bracket").

    Crie uma função chamada processMessage que aceite um MessageFormatter e uma string de mensagem, então retorne o resultado formatado. Essa função não precisa saber qual formatador específico recebe. Ela apenas chama format() no objeto que for passado.

    Com base na entrada do tipo de formatador, crie o objeto de formatador apropriado. Passe-o à sua função processMessage junto com a mensagem e imprima o resultado.

    Em uma nova linha, imprima qual categoria de padrão essa estrutura representa. Como estamos definindo comportamentos intercambiáveis por meio de uma interface, imprima: Pattern category: Behavioral

Este desafio mostra como as interfaces permitem trocar implementações sem alterar o código que as utiliza: uma base para padrões como Strategy, que você explorará nas próximas lições.

Experimente você mesmo

<?php
require_once 'Formatters.php';

// Ler entrada
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Crie uma função chamada processMessage que aceita um MessageFormatter
// e uma string de mensagem, então retorna o resultado formatado


// TODO: Com base em $formatterType ("upper" ou "bracket"), crie o formatador apropriado


// TODO: Chame processMessage com o formatador e a mensagem, então imprima o resultado


// TODO: Print the pattern category on a new line
// Format: "Pattern category: Behavioral"

?>
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 PHP online