Các mẫu thiết kế Python - Trạng thái

Nó cung cấp một mô-đun cho các máy trạng thái, được thực hiện bằng cách sử dụng các lớp con, dẫn xuất từ ​​một lớp máy trạng thái được chỉ định. Các phương thức là trạng thái độc lập và gây ra các chuyển đổi được khai báo bằng cách sử dụng trình trang trí.

Làm thế nào để thực hiện mô hình trạng thái?

Cách triển khai cơ bản của mẫu trạng thái được hiển thị bên dưới:

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)

Đầu ra

Chương trình trên tạo ra kết quả sau: