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.
