Maison  >  Article  >  Java  >  Comprendre le modèle de conception de la méthode Factory

Comprendre le modèle de conception de la méthode Factory

王林
王林original
2024-07-23 17:37:20680parcourir

Understanding the Factory Method Design Pattern

Comprendre le modèle de conception de la méthode Factory

Problème

Le modèle Factory Method répond à la nécessité de créer des objets sans spécifier la classe exacte d'objet qui sera créé. Ceci est utile lorsque vous disposez de plusieurs sous-classes d'une superclasse et que vous souhaitez déléguer la création d'objets à une sous-classe spécifique en fonction de certaines conditions ou paramètres.

Solution

Le modèle Factory Method fournit une interface pour créer des objets dans une superclasse, mais permet aux sous-classes de modifier le type d'objets qui seront créés. Cela favorise un couplage lâche en garantissant que le code client interagit avec l'interface d'usine plutôt qu'avec les classes concrètes directement.

Avantages et inconvénients

Avantages

  • Découple le code client : Permet au code client de fonctionner avec une interface ou une classe abstraite pour la création d'objets, favorisant ainsi la flexibilité et la maintenabilité.
  • Favorise la réutilisation du code : Les sous-classes peuvent réutiliser la même logique de création d'objet définie dans la méthode d'usine.
  • Prend en charge le principe ouvert-fermé : De nouvelles sous-classes peuvent être ajoutées sans modifier le code client existant, en adhérant au principe ouvert-fermé.

Inconvénients

  • Complexité : Introduit une complexité supplémentaire avec l'introduction de plusieurs sous-classes et méthodes d'usine.
  • Nécessite un sous-classement : Chaque type de produit nécessite sa propre sous-classe, ce qui peut conduire à une prolifération de classes dans la base de code.
  • Ne convient pas aux cas simples : La surutilisation du modèle de méthode Factory dans des scénarios simples peut conduire à une abstraction et une complexité inutiles.

Exemple d'application dans le monde réel

Un exemple pratique du modèle Factory Method est dans un cadre de création de documents. En fonction du type de document (par exemple, PDF, HTML), une fabrique de documents correspondante crée l'objet document avec un formatage et des fonctionnalités appropriés.

Exemple de code en Java

Modèle de méthode d'usine dans le code

java
// Product interface
public interface Document {
    void open();
    void close();
}

// Concrete Product 1
public class PDFDocument implements Document {
    @Override
    public void open() {
        System.out.println("Opening PDF document");
    }

    @Override
    public void close() {
        System.out.println("Closing PDF document");
    }
}

// Concrete Product 2
public class HTMLDocument implements Document {
    @Override
    public void open() {
        System.out.println("Opening HTML document");
    }

    @Override
    public void close() {
        System.out.println("Closing HTML document");
    }
}

// Creator interface
public interface DocumentFactory {
    Document createDocument();
}

// Concrete Creator 1
public class PDFDocumentFactory implements DocumentFactory {
    @Override
    public Document createDocument() {
        return new PDFDocument();
    }
}

// Concrete Creator 2
public class HTMLDocumentFactory implements DocumentFactory {
    @Override
    public Document createDocument() {
        return new HTMLDocument();
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        DocumentFactory factory1 = new PDFDocumentFactory();
        Document pdfDocument = factory1.createDocument();
        pdfDocument.open();
        pdfDocument.close();

        DocumentFactory factory2 = new HTMLDocumentFactory();
        Document htmlDocument = factory2.createDocument();
        htmlDocument.open();
        htmlDocument.close();
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn