Ну, во-первых, если вы собираетесь использовать шаблон «Стратегия» с интерфейсом, вам может потребоваться такой интерфейс.
public interface IStrategyUI
{
void Execute();
}
тогда несколько классов для вашей логики
public class StatusAStrategy : IStrategyUI
{
public void Execute()
{
//implement
}
}
тогда ваше утверждение if может быть технически фабричным.
IStrategyUI logic;
switch(someObject.Status)
{
case 'A': logic = new StatusAStrategy();
//etc etc
}
logic.Execute();
или вы можете вернуть этот объект как интерфейс и инкапсулировать оператор switch в другом методе или классе фабрики.
Так что вы можете использовать это так.
IStrategyUI logic = StrategyFactory.GetStrategy(status);
logic.Execute();
Вам решать.
Также я здесь не использую класс сдерживания, но вы можете, если хотите.
Вы также можете сделать это с делегатами.
Класс содержания
class StrategyHolder
{
public Action Strategy { get; set; }
public void Execute()
{
if(this.Strategy != null)
this.Strategy();
}
}
Методы различной стратегии.
void EnableStatusA()
{
//do everything for status A
}
Смена оператора
StrategyHolder logic = new StrategyHolder();
switch(someObject.Status)
{
case 'A': logic.Strategy = EnableStatusA;
//etc etc
}
return logic;
Позвоните этому извне.
StrategyHolder logic = StrategyFactory.GetStrategy(status);
logic.Execute();