Introduzione ai Design Pattern

Per comodità di trattazione, dividiamo i pattern in due categorie

  • pattern di programmazione e
  • pattern architetturali.

Questa suddivisione si basa sull’idea che, mentre i pattern di programmazione forniscono principi sullo sviluppo del software inteso come stesura del codice, i pattern architetturali forniscono dei principi su come il software va strutturato (più che come va scritto il codice). Volendo fare un parallelo con la progettazione di un automobile, mentre i pattern di programmazione indicano come risolvere i problemi di assemblaggio dei vari pezzi, i pattern architetturali indicando come è meglio disporre le varie parti dell’auto in modo che l’assemblaggio sia più agevole.

Pattern di programmazione: The Gang of Four

Creational pattern

  • Abstract Factory: prevede un meccanismo (ad esempio un metodo) che generi un insieme di classi che sono tra loro interdipendenti, ma la cui classe concreta è nota solo in runtime.
  • Builder: separa la costruzione di un oggetto complesso dalla sua rappresentazione.
  • Factory Method: prevede un metodo che viene utilizzato per istanziare un oggetto utilizzando la sottoclasse opportuna in base al runtime.
  • Prototype: prevede che vi sia un’istanza prototipo dalla quale creare nuove oggetti.
  • Singleton: prevede che una classe possa avere al massimo un’istanza.

Structural pattern

  • Adapter: prevede che una classe o un’interfaccia venga utilizzata per adattare due classi o interfacce “incompatibili”.
  • Bridge: rende un concetto astratto (ad esempio una classe) indipendente dalla sua realizzazione concreta in modo che questi possano variare separatamente.
  • Composite: compone oggetti utilizzato una struttura gerarchica in modo che possano essere utilizzati in modo uniforme.
  • Decorator: aggiunge ad un oggetto funzionalità in maniera dinamica e non durante la fase di stesura e compilazione del codice.
  • Facade: crea un’interfaccia unica componendo diverse interfacce di un sistema complesso.
  • Flyweight: Condivide l’implementazione di funzionalità tra diversi oggetti.
  • Proxy: Prevede una classe che possa fungere da “segnaposto” per un’altra classe.

Behavioral pattern

  • Chain of Responsibility: definisce in maniera chiara chi è responsabile di gestire un “messaggio” (ad esempio un comando).
  • Command: incapsula una richiesta all’interno di un oggetto.
  • Interpreter: prevede un meccanismo di traduzione per uno specifico linguaggio.
  • Iterator: prevede un metodo per accedere, in modo sequenziale, agli elementi di una collezione, senza conoscere i dettagli di memorizzazione di tali elementi.
  • Mediator: prevede un oggetto che incapsula il comportamento di un altro oggetto permettendo di variare le varie parti in modo indipendente.
  • Memento: pur mantenendo l’incapsulamento, cattura lo stato interno di un oggetto per il suo salvataggio e successivo ripristino.
  • Observer: definisce una dipendenza uno-a-molti tra un oggetto che cambia stato ed altri oggetti che reagiscono automaticamente a questo cambio di stato.
  • State: permette ad un oggetto di cambiare il proprio comportamento in base al proprio stato interno (come se cambiasse classe).
  • Strategy: definisce ed incapsula diversi algoritmi per risolvere lo stesso problema permettendone l’uso in modo intercambiabile.
  • Template Method: definisce lo “scheletro” di un algoritmo lasciando alle sottoclassi l’intera realizzazione dell’algoritmo.
  • Visitor: prevede un’operazione che verrà eseguita sui vari elementi di una struttura.

Pattern architetturali

Model-View-Control (MVC)

Model-View-Viewmodel (MVVM)

Client-Server

  • Michele Schimd © 2024
  • Ultimo aggiornamento: 17/02/2024
  • Materiale di studio e di esercizio per gli alunni dello Zuccante.

Creative Commons License