Похоже на Анти-паттерн ; doStrategy
слишком много знает о конкретном состоянии, и всякий раз, когда добавляется новая конкретная стратегия, вы должны обновить doStrategy
.
Указанный выше код нарушает Открытый / Закрытый принцип , и мне интересно, может ли он быть назван или имеет имя для выше code
.
После мыслей :
Когда вы звоните ConcreteStrategy0.doStrategy
, вы в основном звоните как
new ConcreteStrategy0().doStrategy(someData);
Хотя это могло бы быть лучше рефакторинг как
// Inject strategy: Delegate object creation to a factory
new ConcreteStrategy0().doStrategy(StrategyFactory.Create(), someData);
// And update "doStrategy" to,
public void doStrategy(IStrategy strategy, SomeType someData)
{
strategy.singleton.doStrategy(someData);
}
Или полностью передать ответ на стратегию,
// OR Let the strategy do stuff instead
StrategyFactory.Create().doStrategy(someData);