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.
 
		