Modèle de conception 02 - Méthode d'usine

  1. Définition

Définir une interface pour la création d'objets produits, laissant les sous-classes décider quelle classe instancier. Le travail de création effectif estReporté aux sous-classes.

  1. Diagramme UML

  1. Exemple concret

Premier exemple.

Commençons par la classe de produit abstrait

package com.exemple.pattern;

/**
 * Interface de produit abstrait
 */
public interface IOrganisme {
    void initialiser();

    void развивать();
}

Ensuite, deux classes de produits concrets

/**
 * Produit concret - Classe animales
 */
public class Animal implements IOrganisme {

    @Override
    public void initialiser() {
        System.out.println("Un animal a été créé");
    }

    @Override
    public void развивать() {
        System.out.println("L'animal a grandi");
    }
}

/**
 * Produit concret - Classe végétale
 */
public class Plante implements IOrganisme {

    @Override
    public void initialiser() {
        System.out.println("Une plante a été créée");
    }

    @Override
    public void развивать() {
        System.out.println("La plante a grandi");
    }

    public void flétrir() {
        System.out.println("La plante s'est flétrie");
    }
}

Classe d'usine abstraite

/**
 * Interface d'usine abstraite
 */
public interface IUsine {
    IOrganisme produire();
}

Deux classes d'usines concrètes

/**
 * Usine concrète - Usine animale
 */
public class UsineAnimale implements IUsine {

    @Override
    public IOrganisme produire() {
        return new Animal();
    }
}

/**
 * Usine concrète - Usine végétale
 */
public class UsinePlante implements IUsine {

    @Override
    public IOrganisme produire() {
        return new Plante();
    }
}

Appel côté client :

/**
 * Programme principal
 */
public class Application {

    public static void main(String[] args) {
        IUsine usine1 = new UsineAnimale();
        IOrganisme animal = usinee1.produire();
        animal.initialiser();
        animal.развивать();

        IUsine usine2 = new UsinePlante();
        IOrganisme plante = usine2.produire();
        plante.initialiser();
        plante.развивать();
    }
}

  1. Avantages et inconvénients

Avantages : Avec le modèle de méthode d'usine, l'utilisateur n'a besoin de connaître que l'usine spécifique du produit à fabriquer, sans se soucier du porcessus détaillé ni des classes de produits concrètes. Pour ajouter un nouveau produit concret, il suffit d'ajouter une classe de produit correspondante et une usine de produit associée, sans modifier l'usine existante. Ce modèle respecte le « principe ouvert-fermé ».

Inconvénients : Chaque produit supplémentaire nécessite une usine de produit correspondante, ce qui augmente在一定程度上 la complexité du système et accroît la dépendance entre les classes concrètes.

  1. Applications pratiques

Le modèle de méthode d'usine est适用able dans les cas suivants :

Lorsqu'une classe ne connaît pas la classe des objets qu'elle doit créer.

Lorsqu'une classe souhaite que ses sous-classes spécifient les objets qu'elle crée.

Lorsqu'une classe délègue la responsabilité de création d'objtes à plusieurs sous-classes d'aide et que vous souhaitez localiser les informations sur laquelle de ces sous-classes est le mandataire.

Étiquettes: Java design-patterns factory-method POO UML

Publié le 12 juillet à 00h50