Menu
Coddy logo textTech

Introduzione ai design pattern

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 70 di 91.

I design pattern sono soluzioni collaudate a problemi comuni che gli sviluppatori incontrano ripetutamente durante la creazione di software. Invece di reinventare ogni volta la ruota, puoi applicare questi modelli consolidati per risolvere sfide simili nel tuo codice.

Pensa ai design pattern come a ricetta. Proprio come uno chef segue una ricetta per creare un piatto perfezionato nel tempo, gli sviluppatori usano i design pattern per strutturare il codice in modi che sono stati testati e perfezionati da innumerevoli programmatori prima di loro.

I pattern di progettazione sono in genere raggruppati in tre categorie:

Categoria Scopo Esempi
Creazionali Come vengono creati gli oggetti Singleton, Factory
Strutturali Come vengono composti gli oggetti Adapter, Decorator
Comportamentali Come comunicano gli oggetti Observer, Strategy

In realtà, hai usato schemi durante tutto il corso senza rendertene conto. Quando hai creato classi astratte con metodi che le classi figlie devono implementare, stavi applicando una forma del pattern Template Method. Quando hai usato le interfacce per definire contratti, ti stavi preparando al pattern Strategy.

Imparare i design pattern ti fornisce un vocabolario comune con gli altri sviluppatori. Invece di spiegare nel dettaglio una struttura complessa, puoi semplicemente dire "Qui ho usato il pattern Factory" e gli sviluppatori esperti capiranno subito il tuo approccio. Nelle lezioni successive, implementeremo in PHP diversi pattern essenziali.

challenge icon

Sfida

Facile

Costruiamo un semplice sistema di formattazione dei messaggi che dimostri come i pattern di progettazione aiutino a organizzare il codice. Individuerai a quale categoria di pattern appartiene ciascun componente e vedrai come le diverse parti di un sistema collaborano.

Organizzerai il codice in tre file:

  • MessageFormatter.php: crea un’interfaccia chiamata MessageFormatter che definisce un contratto per la formattazione dei messaggi. Dovrebbe avere un unico metodo format(string $message): string. Questo rappresenta la categoria comportamentale. Definisce il modo in cui gli oggetti comunicano ed elaborano i dati.
  • Formatters.php: includi il file MessageFormatter e crea due classi che implementano l’interfaccia:
    • UppercaseFormatter: il suo metodo format() restituisce il messaggio convertito in maiuscolo
    • BracketFormatter: il suo metodo format() racchiude il messaggio tra parentesi quadre, come [message]
  • main.php: includi il file Formatters. Riceverai due input: una stringa con il messaggio e un tipo di formattatore ("upper" o "bracket").

    Crea una funzione chiamata processMessage che accetti un MessageFormatter e una stringa con il messaggio, quindi restituisca il risultato formattato. Questa funzione non deve sapere quale formattatore specifico riceve. Si limita a chiamare format() sull’oggetto passato.

    In base al tipo di formattatore ricevuto come input, crea l’oggetto del formattatore appropriato. Passalo alla tua funzione processMessage insieme al messaggio e stampa il risultato.

    Su una nuova riga, stampa a quale categoria di pattern appartiene questa struttura. Poiché definiamo comportamenti intercambiabili tramite un’interfaccia, stampa: Pattern category: Behavioral

Questa sfida mostra come le interfacce permettano di sostituire le implementazioni senza modificare il codice che le utilizza: una base per pattern come Strategy, che esplorerai nelle prossime lezioni.

Provalo tu

<?php
require_once 'Formatters.php';

// Leggi l'input
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Crea una funzione chiamata processMessage che accetti un MessageFormatter
// e una stringa di messaggio, quindi restituisca il risultato formattato


// TODO: In base a $formatterType ("upper" o "bracket"), crea il formatter appropriato


// TODO: Chiama processMessage con il formatter e il messaggio, quindi stampa il risultato


// TODO: Stampa la categoria del pattern su una nuova riga
// Formato: "Pattern category: Behavioral"

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