Инструменты пользователя

Инструменты сайта


pattern_state

Назад

Паттерн Состояние позволяет объекту изменять свое поведение при изменении его внутреннего состояния. Внешне это выглядит так, словно объект меняет свой класс.

Применимость:

  • Когда поведение объекта зависит от его состояния и должно изменяться во время выполнения.
  • когда в коде операций встречаются состоящие из многих ветвей условные операторы, в которых выбор ветви зависит от состояния.

State
interface State
{
    void writeName(StateContext stateContext, String name);
}
 
class StateA implements State
{
    public void writeName(StateContext stateContext, String name)
    {
        System.out.println(name.toLowerCase());
        //Переключить состояние
        stateContext.setState(new StateB());
    }
}
 
class StateB implements State
{
    public void writeName(StateContext stateContext, String name)
    {
        System.out.println(name.toUpperCase());
        //Переключить состояние
        stateContext.setState(new StateA());
    }
}
StateContext
public class StateContext
{
    private State myState;
 
    public StateContext()
    {
        setState(new StateA());
    }
 
    public void setState(State newState)
    {
        this.myState = newState;
    }
 
    public void writeName(String name)
    {
        this.myState.writeName(this, name);
    }
}
main
public class Main
{
    public static void main(String[] args)
    {
        StateContext sc = new StateContext();
        sc.writeName("Monday");
        sc.writeName("Tuesday");
        sc.writeName("Wednesday");
        sc.writeName("Thursday");
        sc.writeName("Saturday");
        sc.writeName("Sunday");
    }
}
/*
monday
TUESDAY
wednesday
THURSDAY
saturday
SUNDAY
*/