Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Design Pattern Factory Method

From Aino Wiki

Jump to: navigation, search

Descrizione

La Gand of Four (La banda dei quattro) descrivono il Factory pattern come un metodo per definire interfacce necessarie alla creazione di oggetti lasciando alle sottoclassi l'onere di decidere quale tipo di classe va instanziata. Si lascia che una classe sia instanziata da una sottoclasse, praticamente si applica ai casi in cui il tipo di oggetto restituito lo decide il metodo chiamato in funzione di una logica incapsulata nel metodo stesso.

Codice di esempio

Riporto il diagramma delle classi del pattern come presentato nel video corso della piattaforma Lynda.com (di LinkedIn):

Pattern FactoryMethod Diagramma01.png

In cosa consiste l'esempio:

  • si definisce una classe astratta "ISavingsAccount" in cui si definisce una proprietà comune a tutte le classi che erediteranno da essa.
  • Due classi concrete derivanti dalla classe di prima
  • Una classe con un metodo concreto che eredita dall'interfaccia "ICreditUnionFactory" (il cui scopo è creare una struttura comune a tutte le classi che ne ereditano).
  • Il metodo concreto restituirà un oggetto differente in base al contenuto del parametro in input, ciò è lo scopo del Pattern
  • porre attenzione al fatto che il metodo di prima è una funzione il cui tipo in uscita è la classe astratta la classe\oggetto reale in uscita è del tipo derivato dalla classe astratta.
namespace Es_FactoryMethod
{
 
    // Product
    public abstract class ISavingsAccount
    {
        public decimal Balance { get; set; }
    }
 
    // Concrete Product
    public class CitiSavingsAcct : ISavingsAccount
    {
        public CitiSavingsAcct()
        {
            Balance = 5000;
        }
    }
 
    // Concrete Product
    public class NationalSavingsAcct : ISavingsAccount
    {
        public NationalSavingsAcct()
        {
            Balance = 2000;
        }
    }
 
    // Creator
    // Questa interfaccia serve ad imporre delle regole comuni a tutte le classi derivate
    // a differenza dell'astrazione però non ha alcuna implementazione di funzionalità
    interface ICreditUnionFactory
    {
        ISavingsAccount GetSavingsAccount(string acctNo);
    }
 
    // Concrete Creators
    // Questa classe restituirà un oggetto differente in base al contenuto del parametro in input
    public class SavingsAcctFactory : ICreditUnionFactory
    {
        public ISavingsAccount GetSavingsAccount(string acctNo)
        {
            if (acctNo.Contains("CITI")) { return new CitiSavingsAcct(); }
            else
            if (acctNo.Contains("NATIONAL")) { return new NationalSavingsAcct(); }
            else
                throw new ArgumentException("Invalid Account Number");
        }
    }
}

Mappa e Link


C# | Design Pattern | Teoria


Visual Studio


Parole chiave:

Author