Все дело в ожидании и подготовке к переменам.
Один из подходов, который некоторые используют (и я не обязательно его защищаю), заключается в создании IThing и ThingFactory.
Весь код будет ссылаться на IThing (вместо ConcreteThing).Все создание объекта может быть выполнено с помощью метода Factory.
ThingFactory.CreateThing (некоторые параметры).
Итак, сегодня у нас есть только AmericanConcreteThing.И возможно, что нам никогда не понадобится другой.Однако, если опыт меня чему-то научил, так это то, что нам ВСЕГДА понадобится другое.
Вам, возможно, не нужен EuropeanThing, но TexasAmericanThing вполне возможна.
Итак, чтобы минимизировать влияние на мой код, я могу изменить строку создания на:
ThingFactory.CreateThing (Account) и Create my class TexasAmericanThing: IThing.
Кроме создания класса, единственным изменением является ThingFactory, который потребует изменения с
public static IThing CreateThing(Account a)
{
return new AmericanThing();
}
to
public static IThing CreateThing(Account a)
{
if (a.State == State.TEXAS) return new TexasAmericanThing();
return new AmericanThing();
}