Aller au contenu principal

State (ou État en français)

Le design pattern State (ou État) est un patron comportemental qui permet à un objet de changer son comportement quand son état interne change, comme s’il changeait de classe.

🧠 Idée principale

Remplacer les instructions if/else ou switch basées sur l’état interne par des objets représentant chaque état.

📦 Composition

  • Context : l’objet dont le comportement change en fonction de son état.
  • State : interface commune à tous les états.
  • ConcreteStates : implémentations spécifiques du comportement pour chaque état.

Implémentation

Interface d'état

class State(ABC):
@abstractmethod
def press_play(self, player):
pass

États concrets

class StoppedState(State):
def press_play(self, player):
print("▶️ Lecture démarrée.")
player.state = PlayingState()

class PlayingState(State):
def press_play(self, player):
print("⏸️ Pause.")
player.state = PausedState()

class PausedState(State):
def press_play(self, player):
print("▶️ Reprise de la lecture.")
player.state = PlayingState()

Contexte

class Player:
def __init__(self):
self.state = StoppedState()

def press_play(self):
self.state.press_play(self)

Utilisation

player = Player()

player.press_play() # ▶️ Lecture démarrée.
player.press_play() # ⏸️ Pause.
player.press_play() # ▶️ Reprise de la lecture.

Diagramme UML

state