【问题标题】:How to avoid branching while using a static factory pattern?使用静态工厂模式时如何避免分支?
【发布时间】:2020-03-27 05:47:51
【问题描述】:

我在部署静态工厂模式时经常卡在分支中,有没有办法让它比下面的代码更整洁:

 private static TestEdition GetCurrentEdition(userconfig config)
    {
        if (config.Edition == Edition.typea)
        {
            return new TestEdition3(config);
        }
        else if (config.Edition == Edition.typeb)
        {
            return new TestEdition4(config);
        }
        return new UnsupportedEdition(config);  
    }

【问题讨论】:

  • 使用多态性?
  • @CaiusJard - 他已经在使用多态性了。
  • 呃;不。他具有多态能力,但是拥有一个巨大的 if 块来费力地测试并返回硬编码的不同子类型并没有利用这种多态性
  • 仅供参考,这是static factory pattern

标签: c# oop refactoring static-factory


【解决方案1】:

我经常使用这种东西:

private static Dictionary<Edition, Func<userconfig, TestEdition>> _factories =
    new Dictionary<Edition, Func<userconfig, TestEdition>>()
    {
        { Edition.typea, c => new TestEdition3(c) },
        { Edition.typeb, c => new TestEdition4(c) },
    }

private static TestEdition GetCurrentEdition(userconfig config)
{
    if (_factories.ContainsKey(config.Edition))
    {
        return _factories[config.Edition](config);
    }
    return new UnsupportedEdition(config);
}

最大的优势是您可以在运行时配置和扩展Dictionary&lt;Edition, Func&lt;userconfig, TestEdition&gt;&gt;

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2011-12-16
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多