Maison >développement back-end >C++ >Comment l'injection de dépendances peut-elle résoudre le problème de nombreuses dépendances dans une méthode d'usine ?

Comment l'injection de dépendances peut-elle résoudre le problème de nombreuses dépendances dans une méthode d'usine ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-21 01:21:38643parcourir

How Can Dependency Injection Solve the Problem of Many Dependencies in a Factory Method?

Méthodes d'usine utilisant l'injection de dépendances et l'inversion de contrôle

Question :

Lorsque les méthodes d'usine créent différents objets, elles doivent gérer un grand nombre de dépendances transmises.

Problème :

Utiliser des instructions switch case dans les usines est une mauvaise odeur de code. Cela introduit des dépendances dans l’usine elle-même et rend son extension difficile.

Solution : modèle de stratégie d'injection de dépendances

Interface :

Définir les interfaces d'usine automobile et de stratégie automobile pour dissocier la création automobile de la mise en œuvre concrète.

<code>public interface ICarFactory
{
    ICar CreateCar();
    bool AppliesTo(Type type);
}

public interface ICarStrategy
{
    ICar CreateCar(Type type);
}</code>

Usine :

Mettre en place des usines distinctes pour chaque type de voiture. Les dépendances de ces usines seront injectées par le conteneur DI.

<code>public class Car1Factory : ICarFactory
{
    private readonly IDep1 dep1;
    private readonly IDep2 dep2;
    private readonly IDep3 dep3;

    // ... (构造函数和工厂方法)
}</code>

Stratégie :

La classe de stratégie automobile utilisera l'interface d'usine pour créer la voiture en fonction du type d'entrée.

<code>public class CarStrategy : ICarStrategy
{
    private readonly ICarFactory[] carFactories;

    // ... (构造函数和策略方法)
}</code>

Utilisation :

Dans la racine de la composition, injectez les dépendances appropriées dans la classe d'usine et créez la stratégie automobile. Utilisez cette stratégie pour créer le type de voiture souhaité.

<code>var strategy = new CarStrategy(new ICarFactory[] {
    new Car1Factory(dep1, dep2, dep3),
    // ...
});

var car1 = strategy.CreateCar(typeof(Car1));</code>

Avantages :

  • Dissocier la création de voiture de l'injection de dépendances.
  • Permet d'ajouter et de supprimer facilement des types de voitures sans changer de stratégie.
  • Testabilité et flexibilité améliorées.

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