Menu
Coddy logo textTech

Introdução aos Padrões de Projeto

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy. Lição 51 de 70.

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, os padrões nos dão um vocabulário compartilhado e abordagens testadas para estruturar o código.

Pense nos padrões de projeto como plantas. Eles não fornecem um código exato para você copiar, mas descrevem como organizar classes e objetos para resolver desafios específicos. Quando alguém menciona “use o padrão Factory aqui”, desenvolvedores experientes entendem imediatamente a estrutura geral que está sendo proposta.

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

CategoriaFinalidadeExemplos
CriacionaisComo os objetos são criadosSingleton, Factory
EstruturaisComo os objetos são compostosAdapter, Decorator
ComportamentaisComo os objetos se comunicamObserver, Strategy

Os padrões que exploraremos baseiam-se diretamente nos conceitos de POO que você já aprendeu - interfaces, herança, polimorfismo e composição. Cada padrão aproveita esses fundamentos de maneiras específicas para alcançar flexibilidade, manutenibilidade ou reusabilidade.

Nas próximas lições, você implementará vários padrões essenciais, começando por Singleton, Factory, Observer e Strategy. Compreender esses padrões ajudará você a reconhecer soluções comuns em bases de código existentes e a tomar melhores decisões arquiteturais em seus próprios projetos.

challenge icon

Desafio

Fácil

Vamos criar um sistema simples de catálogo de padrões que organiza informações sobre padrões de projeto em vários arquivos. Isso ajudará você a entender como os padrões são categorizados enquanto pratica uma boa organização de código.

Você criará três arquivos para separar diferentes responsabilidades:

  • Pattern.cs: Defina uma classe Pattern no namespace Patterns que represente um único padrão de projeto. Cada padrão deve ter um Name, uma Category (Criacional, Estrutural ou Comportamental) e uma Description. Inclua um método GetSummary() que retorne uma string formatada: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Crie uma classe PatternCatalog no namespace Patterns que gerencie uma coleção de padrões. Seu catálogo deve ser capaz de adicionar padrões e ter um método GetPatternsByCategory(string category) que retorne uma lista de todos os padrões que correspondam a essa categoria. Inclua também um método GetAllSummaries() que retorne uma lista de strings de resumo para todos os padrões do catálogo.
  • Program.cs: Reúna tudo criando um catálogo e preenchendo-o com padrões com base na entrada. Em seguida, exiba os padrões filtrados por categoria.

Você receberá as seguintes entradas:

  • Número de padrões a adicionar
  • Para cada padrão: três linhas contendo nome, categoria e descrição
  • Uma categoria para filtrar

Depois de adicionar todos os padrões ao catálogo, imprima os resumos dos padrões que correspondem à categoria do filtro, um por linha. Se nenhum padrão corresponder, imprima No patterns found.

Por exemplo, se as entradas forem:

3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
Creational

A saída deverá ser:

[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact class

Este desafio demonstra como organizar classes relacionadas em arquivos separados mantém sua base de código limpa e fácil de manter — um princípio que se torna ainda mais importante à medida que você implementa padrões de projeto reais nas próximas lições!

Experimente você mesmo

using System;
using System.Collections.Generic;
using Patterns;

class Program
{
    public static void Main(string[] args)
    {
        // Lê o número de padrões
        int n = Convert.ToInt32(Console.ReadLine());
        
        // Cria um novo PatternCatalog
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: Lê os detalhes de cada padrão (name, category, description)
        // e adiciona-os ao catálogo
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: Cria um Pattern e adiciona-o ao catálogo
        }
        
        // Lê a categoria pela qual filtrar
        string filterCategory = Console.ReadLine();
        
        // TODO: Obtém os padrões pela categoria de filtro
        // e imprime seus resumos
        // Se nenhum padrão corresponder, imprime "No patterns found"
    }
}
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 C# online