Паттерн Состояние позволяет объекту изменять своё поведение в зависимости от текущего состояния.
Паттерн Состояние реализует поведение как набор отдельных классов для каждого состояния. Это позволяет объекту менять своё поведение динамически при переходе между состояниями.
Паттерн Состояние позволяет избежать сложных условных конструкций, которые описывают, как объект должен вести себя в зависимости от состояния. Вместо этого каждое состояние реализуется как отдельный класс.
Пример из реальной жизни:
Представьте кофемашину, которая может быть в состояниях "ожидание", "приготовление кофе", "выдача кофе". Каждое состояние имеет своё уникальное поведение.
Реализация в Python:
class State:
def handle(self):
pass
class WaitingState(State):
def handle(self):
print("Кофемашина ожидает выбора напитка.")
class BrewingState(State):
def handle(self):
print("Кофемашина готовит кофе.")
class DispensingState(State):
def handle(self):
print("Кофемашина выдаёт кофе.")
class CoffeeMachine:
def __init__(self):
self.state = WaitingState()
def set_state(self, state):
self.state = state
def press_button(self):
self.state.handle()
# Использование
machine = CoffeeMachine()
machine.press_button()
machine.set_state(BrewingState())
machine.press_button()
machine.set_state(DispensingState())
machine.press_button()Когда использовать:
Когда объект должен изменять своё поведение в зависимости от состояния.
Для уменьшения сложности кода с большим количеством условных конструкций.