I Pattern Creazionali

0
47

La categoria più usata di design pattern è senza ombra di dubbio quella relativa alla creazione degli oggetti.

La famiglia dei pattern creazionali è costituita dall’insieme dei pattern che si occupano dei problemi di creazione delle istanze di classe, focalizzando l’attenzione sui meccanismi di istanziazione degli oggetti.

L’obiettivo che sta alla base di questi schemi è l’implementazione di sistemi indipendenti dalla creazione e rappresentazione di oggetti concreti. Nella maggior parte dei casi, pattern come Singleton, Factory e Builder vengono appunto adoperati per creare un ulteriore livello di astrazione legato alla creazione delle istanze. Questo, nello specifico, produce il fenomeno in cui il processo di istanziazione di una famiglia di oggetti viene delegato ad una classe, ovvero un oggetto che genera altri oggetti.

L’importanza dei pattern creazionali cresce con l’evolversi della propria applicazione, in cui è necessario attuare il principio di separation of concerns, modularizzando l’architettura più mediante composizione di oggetti e meno tramite ereditarietà fra classi. Sfruttando correttamente questi pattern, vedrai come modifiche alle classi concrete (ad esempio sostituendo una classe concreta con una compatibile) comporteranno l’aggiornamento, in un solo punto, di poche righe di codice, ottimizzando la propria codebase in termini di riusabilità.

In sintesi, possiamo dire che i pattern creazionali:

  • Incapsulano la conoscenza delle classi concrete che l’applicazione usa;
  • Permettono il cosidetto information hiding delle classi concrete, occultando come queste vengano istanziate e combinate e fornendo un’interfaccia alla funzionalità per il resto dell’applicazione;

Esistono due tipologie di pattern creazionali, differenziati in funzione dello scope:

  • Class Pattern, che si occupano delle relazioni fra le classi e le loro sottoclassi. Rimandano la creazione di oggetti alle sottoclassi. Queste relazioni vengono stabilite attraverso l’ereditarietà e pertanto sono già fissate al runtime;
  • Object Pattern, si occupano delle relazioni fra gli oggetti, che possono cambiare al runtime e sono quindi più dinamiche. Questi pattern rimandano la creazione di oggetti ad altri oggetti;