English 中文(简体)
Python Design Patterns - State
  • 时间:2024-12-22

Python Design Patterns - State


Previous Page Next Page  

It provides a module for state machines, which are implemented using subclasses, derived from a specified state machine class. The methods are state independent and cause transitions declared using decorators.

How to implement the state pattern?

The basic implementation of state pattern is shown below −

class ComputerState(object):

   name = "state"
   allowed = []

   def switch(self, state):
      """ Switch to new state """
      if state.name in self.allowed:
         print  Current: ,self,  => switched to new state ,state.name
         self.__class__ = state
      else:
         print  Current: ,self,  => switching to ,state.name, not possible. 

   def __str__(self):
      return self.name

class Off(ComputerState):
   name = "off"
   allowed = [ on ]

class On(ComputerState):
   """ State of being powered on and working """
   name = "on"
   allowed = [ off , suspend , hibernate ]

class Suspend(ComputerState):
   """ State of being in suspended mode after switched on """
   name = "suspend"
   allowed = [ on ]

class Hibernate(ComputerState):
   """ State of being in hibernation after powered on """
   name = "hibernate"
   allowed = [ on ]

class Computer(object):
   """ A class representing a computer """
   
   def __init__(self, model= HP ):
      self.model = model
      # State of the computer - default is off.
      self.state = Off()
   
   def change(self, state):
      """ Change state """
      self.state.switch(state)

if __name__ == "__main__":
   comp = Computer()
   comp.change(On)
   comp.change(Off)
   comp.change(On)
   comp.change(Suspend)
   comp.change(Hibernate)
   comp.change(On)
   comp.change(Off)

Output

The above program generates the following output −

Design Pattern Output Advertisements