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 ?
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 :
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!