Основная идея шаблона состояния заключается в том, что в некотором классе Context определенное поведение определено в другом объекте.
public class Context
{
....
public void Request()
{
_state.Handle(this);
}
}
Поведение Request
зависит от текущего значения _state
.State
- это то, что может измениться во время выполнения, и для пользователя Context
поведение Context
изменится.
В следующем коде текущий Context
передается в State
, и State
может изменить Context
.
/// <summary>
/// The 'State' abstract class
/// </summary>
abstract class State
{
public abstract void Handle(Context context);
}
/// <summary>
/// A 'ConcreteState' class
/// </summary>
class ConcreteStateA : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateB();
}
}
/// <summary>
/// A 'ConcreteState' class
/// </summary>
class ConcreteStateB : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateA();
}
}
Этот пример взят из справочная , которая содержит описание наиболее популярных шаблонов дизайна.