Design pattern

in C#, Informatica, Programmazione

Design Patterns – Factory Method

Reading Time: < 1 minute

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

factory - Diagramma UML

Diagramma UML – Factory

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.