首頁 >後端開發 >C++ >依賴注入如何解決具有許多依賴項的工廠方法挑戰?

依賴注入如何解決具有許多依賴項的工廠方法挑戰?

Linda Hamilton
Linda Hamilton原創
2025-01-21 01:16:11328瀏覽

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

使用依賴注入和控制反轉的工廠方法

問題:

您熟悉工廠方法模式,但在管理工廠建構函式中的大量依賴項時面臨挑戰。您嘗試將特定的汽車類別注入工廠,但這違反了工廠原則。您也不願使用服務定位器,因為它以反模式而聞名。

解:

此場景最適合的方法是策略模式。此模式可讓您的 DI 容器將依賴項注入到屬於它們的工廠實例中,從而無需使用服務定位器或以依賴項使其他類別混亂。

實作:

介面:

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

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

工廠:

<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>

策略:

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

    public CarStrategy(ICarFactory[] carFactories)
    {
        // ... 构造函数和实现
    }
}</code>

用法:

<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>

優勢:

  • 避免在工廠中使用 switch case 語句。
  • 支援增加其他工廠而無需重新設計。
  • 每個工廠都有其自身的依賴項由 DI 容器注入。
  • 遵循依賴注入和控制反轉的原則。

以上是依賴注入如何解決具有許多依賴項的工廠方法挑戰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn