Heim >Backend-Entwicklung >C++ >Wie kann die Abhängigkeitsinjektion das Problem vieler Abhängigkeiten in einer Factory-Methode lösen?

Wie kann die Abhängigkeitsinjektion das Problem vieler Abhängigkeiten in einer Factory-Methode lösen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-21 01:21:38643Durchsuche

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

Factory-Methoden mit Abhängigkeitsinjektion und Umkehrung der Kontrolle

Frage:

Wenn Factory-Methoden unterschiedliche Objekte erstellen, müssen sie eine große Anzahl übergebener Abhängigkeiten verarbeiten.

Problem:

Die Verwendung von Switch-Case-Anweisungen in Fabriken stinkt nach schlechtem Code. Es führt zu Abhängigkeiten in der Fabrik selbst und erschwert deren Erweiterung.

Lösung: Dependency-Injection-Strategiemuster

Schnittstelle:

Definieren Sie Schnittstellen für Autofabriken und Autostrategien, um die Fahrzeugerstellung von der konkreten Umsetzung zu entkoppeln.

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

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

Fabrik:

Implementieren Sie separate Fabriken für jeden Fahrzeugtyp. Die Abhängigkeiten dieser Fabriken werden vom DI-Container eingefügt.

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

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

Strategie:

Die Auto-Strategieklasse verwendet die Fabrikschnittstelle, um das Auto basierend auf dem Eingabetyp zu erstellen.

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

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

Verwendung:

Fügen Sie im Kompositionsstamm die entsprechenden Abhängigkeiten in die Fabrikklasse ein und erstellen Sie die Autostrategie. Verwenden Sie diese Strategie, um den gewünschten Fahrzeugtyp zu erstellen.

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

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

Vorteile:

  • Entkoppeln Sie die Fahrzeugerstellung von der Abhängigkeitsinjektion.
  • Ermöglicht das einfache Hinzufügen und Entfernen von Fahrzeugtypen, ohne die Strategien zu ändern.
  • Verbesserte Testbarkeit und Flexibilität.

Das obige ist der detaillierte Inhalt vonWie kann die Abhängigkeitsinjektion das Problem vieler Abhängigkeiten in einer Factory-Methode lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn