Maison > développement back-end > C++ > Comment l'injection de dépendances peut-elle résoudre les problèmes des méthodes d'usine avec de nombreuses dépendances ?

Comment l'injection de dépendances peut-elle résoudre les problèmes des méthodes d'usine avec de nombreuses dépendances ?

Linda Hamilton
Libérer: 2025-01-21 01:16:11
original
327 Les gens l'ont consulté

How Can Dependency Injection Solve Factory Method Challenges with Many Dependencies?

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

Question :

Vous connaissez le modèle de méthode factory, mais vous rencontrez des difficultés pour gérer un grand nombre de dépendances dans le constructeur d'usine. Vous essayez d’injecter une classe de voiture concrète dans l’usine, mais cela viole le principe de l’usine. Vous ne souhaitez pas non plus utiliser le localisateur de services, car il est connu pour être un anti-modèle.

Solution :

La méthode la plus adaptée à ce scénario est le Mode Stratégie. Ce modèle permet à vos conteneurs DI d'injecter des dépendances dans les instances d'usine qui leur appartiennent, éliminant ainsi le besoin d'utiliser des localisateurs de services ou d'encombrer d'autres classes avec des dépendances.

Mise en œuvre :

Interface :

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

public interface ICarStrategy
{
    ICar CreateCar(Type type);
}</code>
Copier après la connexion

Usine :

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

    // ... 构造函数和实现
}

public class Car2Factory : ICarFactory
{
    private readonly IDep4 dep4;
    private readonly IDep5 dep5;
    private readonly IDep6 dep6;

    // ... 构造函数和实现
}</code>
Copier après la connexion

Stratégie :

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

    public CarStrategy(ICarFactory[] carFactories)
    {
        // ... 构造函数和实现
    }
}</code>
Copier après la connexion

Utilisation :

<code>var strategy = new CarStrategy(new ICarFactory[] {
    new Car1Factory(dep1, dep2, dep3),
    new Car2Factory(dep4, dep5, dep6)
});

var car1 = strategy.CreateCar(typeof(Car1));
var car2 = strategy.CreateCar(typeof(Car2));</code>
Copier après la connexion

Avantages :

  • Évitez d'utiliser des instructions switch case dans les usines.
  • Prend en charge l'ajout d'usines supplémentaires sans refonte.
  • Chaque usine possède ses propres dépendances injectées par le conteneur DI.
  • Suivez les principes de l'injection de dépendances et de l'inversion de contrôle.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal