Advertisement
fcamuso

Design Patterns - Factory Method

Jul 14th, 2022
1,217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.66 KB | None | 0 0
  1. --- program.cs  ---
  2. namespace GoFFactoryMethod
  3. {
  4.     internal class Program
  5.     {
  6.         static void Main(string[] args)
  7.         {
  8.             ICreditCardFactory factory = new CreditCardFactory();
  9.  
  10.             Correntista correntista = new Correntista()
  11.             {
  12.                 ID = 123,
  13.                 DataNascita = new DateTime(1970, 4, 22),
  14.                 StatoLavorativo = StatoLavorativo.Imprenditore,
  15.                 RedditoAnnuo = 157000,
  16.                 Saldo = 42000
  17.             };
  18.  
  19.             correntista.CreditCard = factory.CreateCreditCard(correntista);
  20.  
  21.             if (correntista.CreditCard is null)
  22.             {
  23.                 Console.WriteLine("Nessuna carta di credito disponibile");
  24.             }
  25.             else
  26.             {
  27.                 Console.WriteLine($"Carta: {correntista.CreditCard.Nome} - Limite: {correntista.CreditCard.Limite:N2}");
  28.             }
  29.             Console.ReadKey();
  30.         }
  31.     }
  32. }
  33. -----------------------------------------------------------------------
  34.  
  35. --- correntista.cs
  36. using System;
  37. using System.Collections.Generic;
  38. using System.Linq;
  39. using System.Text;
  40. using System.Threading.Tasks;
  41.  
  42. namespace GoFFactoryMethod
  43. {
  44.     public enum StatoLavorativo
  45.     {
  46.         Studente,
  47.         Disoccupato,
  48.         Lavoratore,
  49.         Imprenditore,
  50.         Pensionato
  51.     }
  52.  
  53.     public interface ICorrentista
  54.     {
  55.         public StatoLavorativo StatoLavorativo { get; }
  56.         public int Anni { get; }
  57.     }
  58.  
  59.     public class Correntista : ICorrentista
  60.     {
  61.         public int ID { get; set; }
  62.  
  63.     /*
  64.      * private int id = 0;
  65.      *
  66.      * public int ID() {return id;}
  67.      */
  68.  
  69.  
  70.         public DateTime DataNascita { get; set; }
  71.         public StatoLavorativo StatoLavorativo { get; set; }
  72.         public decimal RedditoAnnuo { get; set; }
  73.        
  74.         public ICreditCard? CreditCard { get; set; } = null;
  75.        
  76.         public decimal Saldo { get; set; }
  77.         public int Anni
  78.         {
  79.             get
  80.             {
  81.                 long ticks = DateTime.Now.Subtract(DataNascita).Ticks;
  82.                 return new DateTime(ticks).Year;
  83.             }
  84.         }
  85.     }
  86. }
  87. -----------------------------------------------------------------------------
  88.  
  89. --- ICreditCard.cs ---
  90. using System;
  91. using System.Collections.Generic;
  92. using System.Linq;
  93. using System.Text;
  94. using System.Threading.Tasks;
  95.  
  96. namespace GoFFactoryMethod
  97. {
  98.     public interface ICreditCard
  99.     {
  100.         string Nome { get; }
  101.         decimal Limite { get; }
  102.         void Paga();
  103.     }
  104.  
  105.     internal abstract class CreditCard : ICreditCard
  106.     {
  107.         protected string nome = String.Empty;
  108.  
  109.         protected decimal limite;
  110.  
  111.         public string Nome
  112.         {
  113.             get => nome;
  114.         }
  115.  
  116.         public decimal Limite
  117.         {
  118.             get => limite;
  119.         }
  120.         public virtual void Paga() { }
  121.     }
  122.  
  123.     internal class PrimaCreditCard : CreditCard
  124.     {
  125.         public PrimaCreditCard(decimal limite)
  126.         {
  127.             nome = "Carta Prima";
  128.             this.limite = limite;
  129.         }
  130.     }
  131.  
  132.     internal class ClassicCreditCard : CreditCard
  133.     {
  134.         public ClassicCreditCard(decimal limite)
  135.         {
  136.             nome = "Carta Classic";
  137.             this.limite = limite;
  138.         }
  139.     }
  140. }
  141. ------------------------------------------------------------------------------
  142.  
  143. --- CreditCardFactory ---
  144. using System;
  145. using System.Collections.Generic;
  146. using System.Linq;
  147. using System.Text;
  148. using System.Threading.Tasks;
  149.  
  150. namespace GoFFactoryMethod
  151. {
  152.     public interface ICreditCardFactory
  153.     {
  154.         ICreditCard? CreateCreditCard(ICorrentista correntista);
  155.     }
  156.  
  157.  
  158.     public abstract class AbstractCreditCardFactory : ICreditCardFactory
  159.     {
  160.         public abstract ICreditCard? CreateCreditCard(ICorrentista correntista);
  161.     }
  162.  
  163.     public class CreditCardFactory : AbstractCreditCardFactory
  164.     {
  165.         public override ICreditCard? CreateCreditCard(ICorrentista correntista)
  166.         {
  167.             ICreditCard? card = null;
  168.             switch (correntista.StatoLavorativo)
  169.             {
  170.                 case StatoLavorativo.Disoccupato:
  171.                     break;
  172.  
  173.                 case StatoLavorativo.Studente:
  174.                     card = new PrimaCreditCard(500);
  175.                     break;
  176.  
  177.                 case StatoLavorativo.Lavoratore:
  178.                     card = new ClassicCreditCard(1000);
  179.                     break;
  180.  
  181.                 case StatoLavorativo.Imprenditore:
  182.                     card = new ClassicCreditCard(2000);
  183.                     break;
  184.             }
  185.  
  186.             return card;
  187.         }
  188.     }
  189. }
  190.  
  191.  
  192.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement