Tipologia: Creazionale
Obiettivo: viene definita un’interfaccia per la creazione di oggetti. Le sotto-classi possono decidere quale classe istanziare. E’ possibile differire la creazione delle sottoclassi
Frequenza di utilizzo: Alta
Componenti:
- Creator: contiene il metodo factory per la creazione di oggetti di tipo Product. Può anche definire un’implementazione predefinita per il metodo factory che restituisce un ConcreteProduct predefinito
- ConcreteProduct: implementa l’interfaccia Product
- Product: definisce l’interfaccia degli oggetti concreti che il metodo factory genera
- ConcreteCreator: esegue l’override del metodo factory per la creazione dell’instanza del ConcreteProduct.
Implementazione in C#
La prima classe è la classe Product:
abstract class Page { }
ovvero l’interfaccia della classe astratta che verrà implementata dal ConcreteProduct:
class SkillsPage : Page { }
Proseguiamo con la definizione della classe astratta Creator:
abstract class Document { private List<Page> _pages = new List<Page>(); public Document() { this.CreatePages(); } public List<Page> Pages { get { return _pages; } } // Factory Method public abstract void CreatePages(); }
con al suo interno la definizione (sempre astratta del metodo factory). Non rimane che definire la classe concreta per il Creator, che implementa il metodo factory:
class Resume : Document { // Factory Method implementation public override void CreatePages() { Pages.Add(new SkillsPage()); Pages.Add(new EducationPage()); Pages.Add(new ExperiencePage()); } }
Si può notare come la classe Creator contenga al suo interno la lista di oggetti creati.