Menu
Coddy logo textTech

Introduzione ai pattern di progettazione

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 51 di 70.

I pattern di progettazione sono soluzioni collaudate a problemi comuni che gli sviluppatori incontrano ripetutamente quando realizzano software. Invece di reinventare la ruota ogni volta, i pattern ci offrono un vocabolario condiviso e approcci verificati per strutturare il codice.

Considera i design pattern come progetti. Non ti forniscono codice esatto da copiare, ma descrivono come organizzare classi e oggetti per risolvere sfide specifiche. Quando qualcuno dice «usa qui il pattern Factory», gli sviluppatori esperti capiscono immediatamente la struttura generale proposta.

I pattern di progettazione rientrano in tre categorie principali:

CategoriaScopoEsempi
CreazionaliCome vengono creati gli oggettiSingleton, Factory
StrutturaliCome sono composti gli oggettiAdapter, Decorator
ComportamentaliCome comunicano gli oggettiObserver, Strategy

I pattern che esploreremo si basano direttamente sui concetti di OOP che hai già imparato: interfacce, ereditarietà, polimorfismo e composizione. Ogni pattern sfrutta questi fondamenti in modi specifici per ottenere flessibilità, manutenibilità o riutilizzabilità.

Nelle prossime lezioni implementerai diversi pattern essenziali, a partire da Singleton, Factory, Observer e Strategy. Comprendere questi pattern ti aiuterà a riconoscere soluzioni comuni nei codebase esistenti e a prendere decisioni architetturali migliori nei tuoi progetti.

challenge icon

Sfida

Facile

Costruiamo un semplice sistema di catalogo di pattern che organizza le informazioni sui pattern di progettazione in più file. Questo ti aiuterà a capire come vengono categorizzati i pattern e, allo stesso tempo, a esercitarti a organizzare bene il codice.

Creerai tre file per separare le diverse responsabilità:

  • Pattern.cs: Definisci una classe Pattern nello spazio dei nomi Patterns che rappresenta un singolo pattern di progettazione. Ogni pattern dovrebbe avere un Name, una Category (Creational, Structural o Behavioral) e una Description. Includi un metodo GetSummary() che restituisce una stringa formattata: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Crea una classe PatternCatalog nello spazio dei nomi Patterns che gestisce una raccolta di pattern. Il tuo catalogo dovrebbe poter aggiungere pattern e avere un metodo GetPatternsByCategory(string category) che restituisce un elenco di tutti i pattern corrispondenti a quella categoria. Includi anche un metodo GetAllSummaries() che restituisce un elenco di stringhe riepilogative per tutti i pattern del catalogo.
  • Program.cs: Metti insieme tutti gli elementi creando un catalogo e popolandolo con i pattern in base all'input. Poi mostra i pattern filtrati per categoria.

Riceverai i seguenti input:

  • Il numero di pattern da aggiungere
  • Per ogni pattern: tre righe contenenti nome, categoria e descrizione
  • Una categoria per cui filtrare

Dopo aver aggiunto tutti i pattern al catalogo, stampa i riepiloghi dei pattern che corrispondono alla categoria del filtro, uno per riga. Se nessun pattern corrisponde, stampa No patterns found.

Ad esempio, se gli input sono:

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

L'output dovrebbe essere:

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

Questa sfida mostra come organizzare classi correlate in file separati mantenga il codice pulito e facile da manutenere: un principio che diventa ancora più importante quando implementerai veri pattern di progettazione nelle prossime lezioni!

Provalo tu

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

class Program
{
    public static void Main(string[] args)
    {
        // Leggi il numero di pattern
        int n = Convert.ToInt32(Console.ReadLine());
        
        // Crea un nuovo PatternCatalog
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: Leggi i dettagli di ogni pattern (name, category, description)
        // e aggiungili al catalogo
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: Crea un Pattern e aggiungilo al catalogo
        }
        
        // Leggi la categoria in base alla quale filtrare
        string filterCategory = Console.ReadLine();
        
        // TODO: Ottieni i pattern in base alla categoria di filtro
        // e stampa i relativi riepiloghi
        // Se nessun pattern corrisponde, stampa "No patterns found"
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online