Fabrique (patron de conception)

Fabrique (patron de conception)
Page d'aide sur l'homonymie Pour les articles homonymes, voir Fabrique.

La fabrique (factory method) est un patron de conception créationnel utilisé en programmation orientée objet. Elle permet d'instancier des objets dont le type est dérivé d'un type abstrait. La classe exacte de l'objet n'est donc pas connue par l'appelant.

Plusieurs fabriques peuvent être regroupées en une fabrique abstraite permettant d'instancier des objets dérivant de plusieurs types abstraits différents.

Comme en général, les fabriques sont uniques dans un programme, on utilise souvent le patron de conception singleton pour les implémenter.

Sommaire

Exemples

Base de données

Considérons une interface de base de données qui supporte de nombreux types de champs. Les champs d'une table sont représentés par une classe abstraite appelée Champ. Chaque type de champ est associé à une sous-classe de Champ, donnant par exemple : ChampTexte, ChampNumerique, ChampDate, ou ChampBooleen.

La classe Champ possède une méthode display() permettant d'afficher le contenu d'un champ dans une interface utilisateur. Un objet de contrôle est créé pour chaque champ, la nature de chaque contrôle dépendant du type du champ associé : le contenu de ChampTexte sera affiché dans un champ de saisie texte, celui de ChampBooleen sera représenté par une case à cocher.

Pour résoudre ce problème, Champ contient une méthode de fabrique appelée createControl() et appelée depuis display() pour créer l'objet adéquat.

Animaux

Dans l'exemple suivant en Java une classe « fabrique » des objets dérivés de la classe Animal en fonction du nom de l'animal passé en paramètre. Il est également possible d'utiliser une interface comme type de retour de la fonction.

public class FabriqueAnimal {
 
  Animal getAnimal(String typeAnimal) throws ExceptionCreation {
    if (typeAnimal.equals("chat")) {
      return new Chat();
    } else if (typeAnimal.equals("chien")) {
      return new Chien();
    }
    throw new ExceptionCreation("Impossible de créer un " + typeAnimal);
  }
 
}


Utilisation

  • Les fabriques sont utilisées dans les toolkits ou les frameworks, car leurs classes sont souvent dérivées par les applications qui les utilisent.
  • Des hiérarchies de classes parallèles peuvent avoir besoin d'instancier des classes de l'autre.

Structure

La fabrique correspond au diagramme UML suivant :

Design pattern fabrique.png

Autres avantages et variantes

Bien que la principale utilisation de la Fabrique soit d'instancier dynamiquement des sous-classes, elle possède d'autres avantages qui ne sont pas liés à l'héritage des classes. On peut donc écrire des fabriques qui ne font pas appel au polymorphisme pour créer plusieurs types d'objets (on fait alors appel à des méthodes statiques).

Noms descriptifs

Les langages orientés objet doivent généralement avoir un nom de constructeur identique au nom de la classe, ce qui peut être ambigu s'il existe plusieurs constructeurs (par surcharge). Les méthodes de fabrication n'ont pas cette obligation et peuvent avoir un nom qui décrit mieux leur fonction. Dans l'exemple suivant, les nombres complexes sont créés à partir de deux nombres réels qui peuvent être interprétés soit comme coordonnées polaires, soit comme coordonnées cartésiennes ; l'utilisation de méthodes de fabrication ne laisse aucune ambiguïté :

 class Complex {
     public static Complex fromCartesian(double real, double imag) {
         return new Complex(real, imag);
     }
 
     public static Complex fromPolar(double rho, double theta) {
         return new Complex(rho * cos(theta), rho * sin(theta));
     }
 
     private Complex(double a, double b) {
         //...
     }
 }
 
 Complex c = Complex.fromPolar(1, pi); // Identique à fromCartesian(-1, 0)

Le constructeur de la classe est ici privé, ce qui oblige à utiliser les méthodes de fabrication qui ne prêtent pas à confusion.

Encapsulation

Les méthodes de fabrication permettent d'encapsuler la création des objets. Ce qui peut être utile lorsque le processus de création est très complexe, s'il dépend par exemple de fichiers de configuration ou d'entrées utilisateur.

L'exemple ci-dessous présente un programme qui crée des icônes à partir de fichiers d'images. Ce programme sait traiter plusieurs formats d'images représentés chacun par une classe :

 public interface ImageReader {
     public DecodedImage getDecodedImage();
 }
 
 public class GifReader implements ImageReader {
     public GifReader( InputStream in ) {
         // check that it's a gif, throw exception if it's not, then if it is
         // decode it.
     }
 
     public DecodedImage getDecodedImage() {
        return decodedImage;
     }
 }
 
 public class JpegReader implements ImageReader {
     //...
 }

Chaque fois que le programme lit une image, il doit créer le lecteur adapté à partir d'informations trouvées dans le fichier. Cette partie peut être encapsulée dans une méthode de fabrication :

 public class ImageReaderFactory {
     public static ImageReader getImageReader( InputStream is ) {
         int imageType = figureOutImageType( is );
 
         switch( imageType ) {
         case ImageReaderFactory.GIF:
             return new GifReader( is );
         case ImageReaderFactory.JPEG:
             return new JpegReader( is );
         // etc.
         }
     }
 }

Le type d'image et le lecteur correspondant peuvent ici être stockés dans un tableau associatif, ce qui évite la structure switch et donne une fabrique facilement extensible.

Voir aussi

Patrons associés

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Fabrique (patron de conception) de Wikipédia en français (auteurs)

Игры ⚽ Нужно решить контрольную?

Regardez d'autres dictionnaires:

  • Fabrique (Patron De Conception) — Pour les articles homonymes, voir Fabrique. La fabrique (factory) est un patron de conception créationnel utilisé en programmation orientée objet. Comme les autres modèles créationnels, la fabrique a pour rôle l instanciation d objets divers dont …   Wikipédia en Français

  • Fabrique (Motif de conception) — Fabrique (patron de conception) Pour les articles homonymes, voir Fabrique. La fabrique (factory) est un patron de conception créationnel utilisé en programmation orientée objet. Comme les autres modèles créationnels, la fabrique a pour rôle l… …   Wikipédia en Français

  • Fabrique (motif de conception) — Fabrique (patron de conception) Pour les articles homonymes, voir Fabrique. La fabrique (factory) est un patron de conception créationnel utilisé en programmation orientée objet. Comme les autres modèles créationnels, la fabrique a pour rôle l… …   Wikipédia en Français

  • Fabrique Abstraite (Patron De Conception) — La fabrique abstraite est un patron de conception (design pattern) créationnel utilisé en génie logiciel. Une fabrique abstraite encapsule un groupe de fabriques ayant une thématique commune. Le code client crée une implémentation concrète de la… …   Wikipédia en Français

  • Patron de methode (patron de conception) — Patron de méthode (patron de conception) Patron de méthode: diagramme de classes en UML La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel. Un patron… …   Wikipédia en Français

  • Patron de méthode (patron de conception) — Patron de méthode: diagramme de classes en UML La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel. Un patron de méthode définit le squelette d un… …   Wikipédia en Français

  • Fabrique abstraite (patron de conception) — La fabrique abstraite est un patron de conception (design pattern) créationnel utilisé en génie logiciel. Une fabrique abstraite encapsule un groupe de fabriques ayant une thématique commune. Le code client crée une implémentation concrète de la… …   Wikipédia en Français

  • Patron de conception — Pour les articles homonymes, voir Patron. le patron Proxy En informatique, et plus particulièrement en développement logiciel, un patron de conception (en anglais  …   Wikipédia en Français

  • Monteur (patron de conception) — Le monteur (builder) est un patron de conception utilisé pour la création d une variété d objets complexes à partir d un objet source. L objet source peut consister en une variété de parties contribuant individuellement à la création de chaque… …   Wikipédia en Français

  • Prototype (patron de conception) — Pour les articles homonymes, voir Prototype. Le patron de conception prototype est utilisé lorsque la création d une instance est complexe ou consommatrice en temps. Plutôt que créer plusieurs instances de la classe, on copie la première instance …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”