Modèle de conception 2 Modèle de méthode d'usine

Quel est le modèle de méthode d'usine

Nous avons une classe de produit, une interface d'usine et une classe d'usine qui implémente l'interface d'usine. La création d'objets de produit repose sur la classe d'usine pour créer. Le noyau est la séparation de la création et de l'utilisation.

"

Définissez une interface pour créer un objet, mais laissez les sous-classes décider de la classe à instancier.La méthode Factory permet à une classe de différer l'instanciation aux sous-classes

"

Le modèle de méthode d'usine présente les avantages suivants:

"
  • Les produits peuvent être obtenus via l'usine sans connaître le processus de création spécifique du produit

  • Si vous ajoutez un nouveau produit, vous n'avez pas besoin de modifier l'usine, ajoutez simplement une nouvelle usine

"

Cependant, cela est également devenu un inconvénient du modèle d'usine, ce qui augmente sans aucun doute la complexité du système.

Si vous souhaitez implémenter une fabrique abstraite, vous avez besoin de plusieurs éléments:

"
  • Usine abstraite

  • Usine spécifique

  • Produit abstrait

  • Produits spécifiques

"

Le diagramme de structure est le suivant:

AbstractFactoryC'est une fabrique abstraite, qui est en fait une interface avec une newProduct()méthode à implémenter pour créer un produit.

ConcreteFactoryPour l'usine de béton, pour AbstractFactoryla réalisation. Il peut y avoir plusieurs usines.

ProductC'est l'interface du produit.

ConcreteProductC'est la réalisation de produits spécifiques, et il y a une correspondance biunivoque entre les produits généraux et les usines.

Code

Cela dit, écrivons une démo pour la réaliser.

Écrivez d'abord une interface produit:

public interface Product {
    void show();
}

Écrivons une interface d'usine:

public interface Factory {
    public Product product();
}

Réalisation produit spécifique:

public class ConcreteProduct1 implements Product {
    @Override
    public void show() {
        System.out.println("具体产品1显示...");
    }
}

Réalisation spécifique en usine:

public class ConcreteFactory1 implements Factory {
    @Override
    public Product product() {
        System.out.println("具体工厂1生成-->具体产品1...");
        return new ConcreteProduct1();
    }
}

Cette usine est utilisée pour créer des produits.

Si nous voulons obtenir l'objet produit, il suffit d'instancier la fabrique

@Slf4j
public class FactoryTest {
    @Test
    public void test() {
        ConcreteFactory1 concreteFactory1 = new ConcreteFactory1();
        Product product = concreteFactory1.product();
        product.show();
    }
}

Résultats de test:

具体工厂1生成-->具体产品1...
具体产品1显示...

Quelques réflexions sur le modèle de méthode d'usine

Le produit lui-même n'est pas instancié, mais est remis à l'usine pour le faire. La méthode de fabrique est que l'instanciation d'une classe est retardée à la classe de fabrique.

Je pense qu'un avantage important de l'utilisation de la méthode d'usine est de bloquer la catégorie de produits. L'appelant peut obtenir le produit sans connaître les détails du produit généré, ce qui garantit la confidentialité et la sécurité du produit fabriqué.

Par exemple, si vous utilisez JDBC pour vous connecter à la base de données, si vous migrez la base de données de MySQL vers Oracle. Il suffit de changer le pilote de la base de données. Rien d'autre n'a besoin d'être changé. Le modèle de méthode d'usine est utilisé ici.

Bien sûr, si vous ajoutez des catégories de produits, vous devez examiner attentivement s'il faut ajouter des catégories d'usine. Après tout, cela augmentera la complexité du système.

Le modèle de méthode d'usine peut être utilisé dans des projets hétérogènes, tels que l'interaction avec un projet non Java via WebService. Bien que WebService prétende être en mesure de réaliser l'isomorphisme de systèmes hétérogènes, il reste de nombreux problèmes dans le développement réel. , Tels que les problèmes de type, les problèmes de prise en charge des fichiers WSDL, etc. Les objets générés à partir de WSDL sont considérés comme un produit, puis gérés par une classe d'usine spécifique afin de réduire le couplage avec les systèmes périphériques.

Dans les applications complexes, une approche multi-usine est généralement utilisée, puis une classe de coordination est ajoutée pour éviter la communication entre l'appelant et chaque sous-usine. Le rôle de la classe de coordination est d'encapsuler la classe de sous-usine et de fournir une interface d'accès unifiée pour les modules de haut niveau.

Recommandé dans le passé

Scannez le code QR pour devenir plus excitant. Ou recherchez Lvshen_9 sur WeChat , vous pouvez répondre pour obtenir des informations

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Autre: cliquez sur [ Mes avantages ] pour avoir plus de surprises.

Je suppose que tu aimes

Origine blog.csdn.net/wujialv/article/details/108799052
conseillé
Classement