Wiki

Go Search
  

Factory Method

Factory Method Pattern

Le pattern méthode de fabrication définit à un niveau d'abstraction supérieur, une interface pour la création d'objets, mais en laissant aux sous-classes le choix des classes à instancier. le pattern fabrication permet à une classe de déléguer l'instanciation à des sous-classes.


Le client passe une commande a une factory de voiture qui va créer en fonction des paramétres la voiture correspondant.
Voici le diagramme dans visual studio: Voici le code de la classe client qui passera la commande:
Class Client
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     public class Client
  8.     {
  9.         public IVoiture PasserCommande(string voiture)
  10.         {
  11.             IVoitureFactory usine = new MercedesFactory();
  12.             return usine.CreerVoiture(voiture);
  13.         }
  14.     }
  15. }

Les deux interfaces permettant la généralisation du pattern sont IVoitureFactory et IVoiture:
Interface IVoitureFactory
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     public interface IVoitureFactory
  8.     {
  9.         IVoiture CreerVoiture(string Voiture);
  10.     }
  11. }

Interface IVoiture
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     public interface IVoiture
  8.     {
  9.         string getDescription();
  10.     }
  11. }

Les classes produits représentant les voitures et implémentant l'interface IVoiture:
Class ClassA
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     public class ClassA : IVoiture
  8.     {
  9.         #region IVoiture Members
  10.         public string getDescription()
  11.         {
  12.             return "Mercedes Class A";
  13.         }
  14.         #endregion
  15.     }
  16. }

Class ClassB
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     public class ClassB : IVoiture
  8.     {
  9.         #region IVoiture Members
  10.         public string getDescription()
  11.         {
  12.             return "Mercedes Class B";
  13.         }
  14.         #endregion
  15.     }
  16. }

etc....
La classe servant de fabrique en fonction du contexte:
Class MercedesFactory
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     public class MercedesFactory : IVoitureFactory
  8.     {
  9.         #region IVoitureFactory Members
  10.         public IVoiture CreerVoiture(string Voiture)
  11.         {
  12.             IVoiture voiture = null;
  13.             switch (Voiture)
  14.             {
  15.                 case "A":
  16.                     voiture = new ClassA();
  17.                     break;
  18.                 case "B":
  19.                     voiture = new ClassB();
  20.                     break;
  21.                 case "C":
  22.                     voiture = new ClassC();
  23.                     break;
  24.                 case "E":
  25.                     voiture = new ClassE();
  26.                     break;
  27.                 default:
  28.                     voiture = null;
  29.                     break;
  30.             }
  31.             return voiture;
  32.         }
  33.         #endregion
  34.     }
  35. }

Le client n'a plus qu'a passer commande dans la classe program:

Class Program
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FactoryPattern
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Client cl = new Client();
  12.             IVoiture voiture = cl.PasserCommande("A");
  13.             Console.WriteLine(voiture.getDescription());
  14.             voiture = cl.PasserCommande("B");
  15.             Console.WriteLine(voiture.getDescription());
  16.             voiture = cl.PasserCommande("C");
  17.             Console.WriteLine(voiture.getDescription());
  18.             Console.ReadLine();
  19.         }
  20.     }
  21. }

Le résultat montre que les objets ont été créées en fonction du contexte:

Last modified at 11/15/2009 8:07 AM  by ASPHOST150\xvanneste