Python设计模式-状态模式
Python设计模式-状态模式
代码基于3.5.2,代码如下;
#coding:utf-8
#状态模式class state():def writeProgram(self,work):raise NotImplementedErrorclass forenoonState(state):def writeProgram(self,work):if work.isFinished:restState().writeProgram(work)else:if work.hour < 12 and work.hour >= 7: print("当前时间 : {0}点,上午工作时间,有精神".format(work.hour)) elif work.hour < 7: sleepingState().writeProgram(work) else:noonState().writeProgram(work)class noonState(state):def writeProgram(self,work):if work.isFinished:restState().writeProgram(work)else:if work.hour < 13:print("当前时间 : {0}点,中午工作时间,有精神".format(work.hour))else:afternoonState().writeProgram(work)class afternoonState(state):def writeProgram(self,work):if work.isFinished:restState().writeProgram(work)else:if work.hour < 17:print("当前时间 : {0}点,下午工作时间,有精神".format(work.hour))else:eveningState().writeProgram(work)class eveningState(state):def writeProgram(self,work):if work.isFinished:restState().writeProgram(work)else:if work.hour < 21:print("当前时间 : {0}点,晚上工作时间,有精神".format(work.hour))else:sleepingState().writeProgram(work)class sleepingState(state):def writeProgram(self,work):print("当前时间 : {0}点,晚上睡觉时间,有精神".format(work.hour))class restState(state):def writeProgram(self,work):print("当前时间 : {0}点,工作已经完成下班休息".format(work.hour))class work():def __init__(self):self.current = forenoonState()self.isFinished = Falseself.hour = 0def setFinished(self,flag):self.isFinished = flagdef writeProgram(self):self.current.writeProgram(self)if __name__ == "__main__":project = work()project.hour = 9project.writeProgram()project.hour = 5project.writeProgram()project.hour = 10project.writeProgram()project.hour = 12project.writeProgram()project.hour = 13project.writeProgram()project.hour = 14project.writeProgram()project.hour = 17project.writeProgram()project.setFinished(True)project.hour = 19project.writeProgram()project.hour = 22project.writeProgram()
状态模式分析与解读
状态模式
状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
代码解读
该例子基于的需求:当工作的时间改变时,来显示不同的工作状态。
1、先定义了state类,以下的工作状态类都是由该类继承而来,并实现writeProgram()方法;
2、先后定义了forenoonState、noonState、afternoonState、eveningState、sleepingState和restState状态类,其中在实现每个writeProgram方法时,先判断工作是否已经完成,如果完成直接调用restState的writeProgram方法,如果当前类不能处理该请求,则接着往下个实例进行传递,如当工作未完成时,在forenoonState类中,如果超过了12点,则新建noonState类并调用该类的writeProgram方法处理,依次往下传递指导处理完成为止。
代码运行结果如下:
当前时间 : 9点,上午工作时间,有精神
当前时间 : 5点,中午工作时间,有精神
当前时间 : 10点,上午工作时间,有精神
当前时间 : 12点,中午工作时间,有精神
当前时间 : 13点,下午工作时间,有精神
当前时间 : 14点,下午工作时间,有精神
当前时间 : 17点,晚上工作时间,有精神
当前时间 : 19点,工作已经完成下班休息
当前时间 : 22点,工作已经完成下班休息
状态模式应用场景:
1、行为状态改变的场景。这点在各种控制器中非常常见,同时,逻辑结构为状态转移图的场景中都非常适用。
优缺点分析
优点
1、结构清晰,相比if ..else...简约不少;
2、封装性好,外部调用不必知道内部实现细节。
缺点
1、在状态比较多时,子类也会非常多,不便于管理。
Python设计模式-状态模式相关推荐
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- Python设计模式-解释器模式
Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...
- Python设计模式-命令模式
Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- Java 设计模式——状态模式
概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...
最新文章
- 【业界】开源大势降低技术门槛,人工智能企业更依赖大数据
- 【转】为什么要写技术博
- 一篇文章讲清楚人工智能、机器学习和深度学习的区别和联系
- Cocos Creator实现的《点我+1》
- 06 | 全局锁和表锁 : 给表加个字段怎么有这么多阻碍
- (一) shario教程资料
- 基础篇--Java IO--概览
- jfinal启动正常,但是报错:oejw.WebAppContext:Failed startup
- 用Windows Live Writer客户端写51CTO博客
- android studio找不到r文件,Apk 中找不到r类文件
- Python写数据结构:二叉树的创建和遍历
- 笔记︱金融风险之欺诈分类以及银行防控体系简述
- RH4 构建ORACLE ASM
- Axure安装、破解、汉化一条龙
- 最新触摸精灵开发教程(价值300
- NOI / 2.1基本算法之枚举 1809:两倍
- 《迷途深渊》隐私声明
- LoadRunner性能测试实战教程
- 二十几岁的女孩应该知道(值得一看)
- 【自学Python】Python布尔型(bool)
热门文章
- 第五届中国企业服务年会:洞见2022数智化的“光与火”
- Golang+Python 实现安全动态开机密码+服务器存储
- 哪家互联网公司涨薪最厉害?居然不是阿里腾讯
- Facebook面经全披露,我是怎么拿到机器学习工程师offer的?
- 解读 | 2019年10篇计算机视觉精选论文(中)
- T5,一个探索迁移学习边界的模型
- 400名微软员工主动曝光薪资:28万元到228万元不等!
- “不给钱就删库”的勒索病毒, 程序员该如何防护?
- 数据科学家需要知道的5种图算法
- AI一分钟 | 黎曼猜想已被证明?对错有待同行评议;讯飞与发帖质疑同传译员达成谅解...