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 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 estabelecidos 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 que foi 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.

Padrões de projeto são tipicamente agrupados em três categorias:

Categoria Propósito Exemplos
Criacional 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

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

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

challenge icon

Desafio

Fácil

Vamos construir 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 a formatação de mensagens. Ela deve ter um único método format(string $message): string. Isso representa a categoria behavioral (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 letras 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 aceita um MessageFormatter e uma string de mensagem, e então retorna o resultado formatado. Esta função não precisa saber qual formatador específico ela recebe — ela apenas chama format() em qualquer objeto que for passado.

    Com base na entrada do tipo de formatador, crie o objeto formatador apropriado. Passe-o para 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 que você troque 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.

Folha de consulta

Padrões de projeto são soluções comprovadas para problemas comuns de programação que fornecem modelos para estruturar o código de forma eficaz.

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

Categoria Propósito Exemplos
Criacional 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

Os padrões de projeto fornecem um vocabulário compartilhado entre os desenvolvedores, facilitando a comunicação de decisões arquitetônicas complexas.

Experimente você mesmo

<?php
require_once 'Formatters.php';

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

// TODO: Criar uma função chamada processMessage que aceite um MessageFormatter
// e uma string de mensagem, e então retorne o resultado formatado


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


// TODO: Chamar processMessage com o formatador e a mensagem, e então imprimir o resultado


// TODO: Imprimir a categoria do padrão em uma nova linha
// Formato: "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