状态模式(python)
状态模式(python)
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
应用场景:一个对象的行为取决于它的状态,即它必须在运行时刻根据状态改变它的行为。如果控制状态转换的条件表达式过于复杂,就可以考虑使用状态模式。
关键点:把状态的判断逻辑转移到表示不同状态的一系列类当中,这样就可以简化复杂的逻辑判断了。
优点:将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
#encoding=utf-8
#
#by panda
#状态模式
def printInfo(info):
print unicode(info, 'utf-8').encode('gbk')
#State:上班状态基类
class State():
def WriteProgram():
pass
#上午工作状态类
class ForenoonState(State):
def WriteProgram(self,w):
if (w.Hour < 12):
printInfo("当前时间:%d点 工作状态:上午工作,精神百倍" % w.Hour)
else:
w.SetState(noonState())
w.WriteProgram()
#中午工作状态类
class noonState(State):
def WriteProgram(self,w):
if (w.Hour < 13):
printInfo("当前时间:%d点 午饭;午休" % w.Hour)
else:
w.SetState(AfternoonState())
w.WriteProgram();
#下午工作状态类
class AfternoonState(State):
def WriteProgram(self,w):
if (w.Hour < 18):
printInfo("当前时间:%d点 下午状态还不错,继续努力" % w.Hour)
else:
w.SetState(EveningState())
w.WriteProgram();
#晚上工作状态类
class EveningState(State):
def WriteProgram(self,w):
if(w.TaskFinished):
w.SetState(RestState())
w.WriteProgram()
return
if (w.Hour < 21):
printInfo("当前时间:%d点 加班哦,好累!" % w.Hour)
else:
w.SetState(SleepingState())
w.WriteProgram();
#睡眠状态
class SleepingState(State):
def WriteProgram(self,w):
printInfo("当前时间:%d点 睡觉了" % w.Hour)
#下班工作状态
class RestState(State):
def WriteProgram(self,w):
printInfo("当前时间:%d点 下班回家了" % w.Hour)
#Context:上班
class Work():
state = ForenoonState();
TaskFinished = False
Hour = 8.0
def SetState(self, state):
self.state = state
def WriteProgram(self):
self.state.WriteProgram(self)
def clientUI():
work = Work()
for i in range(9,23,1):
work.Hour = i
if(i > 19):
work.TaskFinished = True
work.WriteProgram()
return
if __name__ == '__main__':
clientUI();
类图:
摘自:ponder008的专栏
相关内容
- 暂无相关文章
评论关闭