Паттерн State.

Когда его применять?

Исходя из названия уже видно, что этот шаблон позволяет объекту изменять своё поведение в зависимости от состояния. Например в компьютерной игре, когда поведение персонажа во время выполнения может изменяться динамически и постоянно зависит от внутреннего состояния.