-
Notifications
You must be signed in to change notification settings - Fork 3
State
Pandas edited this page Jun 20, 2017
·
1 revision
Позволяет объекту варьировать свое поведение в зависимости от внутреннего состояния. Извне создается впечатление, что изменился класс объекта.
- Используйте паттерн состояние в следующих случаях:
- Когда поведение объекта зависит от его состояния и должно изменяться во время выполнения;
- Когда в коде операций встречаются состоящие из многих ветвей условные операторы, в которых выбор ветви зависит от состояния. Обычно в таком случае состояние представлено перечисляемыми константами. Часто одна и та же структура условного оператора повторяется в нескольких операциях. Паттерн состояние предлагает поместить каждую ветвь в отдельный класс. Это позволяет трактовать состояние объекта как самостоятельный объект, который может изменяться независимо от других.
- Context - контекст: определяет интерфейс, представляющий интерес для клиентов; хранит экземпляр подкласса ConcreteState, которым определяется текущее состояние;
- State - состояние: определяет интерфейс для инкапсуляции поведения, ассоциированного с конкретным состоянием контекста Context;
- Подклассы ConcreteState - конкретное состояние: каждый подкласс реализует поведение, ассоциированное с некоторым состоянием контекста Context.
- класс Context делегирует зависящие от состояния запросы текущему объ екту ConcreteState;
- контекст может передать себя в качестве аргумента объекту State, кото рый будет обрабатывать запрос. Это дает возможность объекту состоянию при необходимости получить доступ к контексту;
- Context–этоосновнойинтерфейсдляклиентов.Клиентымогутконфигу рировать контекст объектами состояния State. Один раз сконфигуриро вав контекст, клиенты уже не должны напрямую связываться с объектами состояния;
- либо Context, либо подклассы ConcreteState могут решить, при каких условиях и в каком порядке происходит смена состояний.
- Результаты использования паттерна состояние:
- Локализует зависящее от состояния поведение и делит его на части, соответствующие состояниям.
- Делает явными переходы между состояниями.
- Объекты состояния можно разделять.