Как избежать разветвления при использовании фабричного шаблона stati c? - PullRequest
1 голос
/ 27 марта 2020

Я часто застреваю в ветвлении при развертывании фабричного шаблона stati c, есть ли способ сделать его более аккуратным, чем приведенный ниже код:

 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);  
    }

1 Ответ

3 голосов
/ 27 марта 2020

Я часто использую такие вещи:

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<Edition, Func<userconfig, TestEdition>> во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...