它为状态机提供了一个模块,它使用从指定的状态机类派生而来的子类来实现。 这些方法独立于状态,并使用装饰器声明转换。
状态模式的基本实现,请参考如下代码 -
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)
执行上述程序生成以下输出 -