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 ?
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.
Interface :
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
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>
Stratégie :
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; public CarStrategy(ICarFactory[] carFactories) { // ... 构造函数和实现 } }</code>
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>
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!