Python设计模式之状态模式原理与用法详解


Posted in Python onJanuary 15, 2019

本文实例讲述了Python设计模式之状态模式原理与用法。分享给大家供大家参考,具体如下:

状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

下面是一个状态模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——状态模式
状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化
(当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变他的行为)
"""
class State(object):
  def __init__(self):
    pass
  def write_program(self, w):
    pass
class Work(object):
  def __init__(self):
    self.hour = 9
    self.curr = ForenoonState()
  def set_state(self, s):
    self.curr = s
  def write_program(self):
    self.curr.write_program(self)
class ForenoonState(State):
  def write_program(self, w):
    if w.hour < 12:
      print "当前时间:%s点,"%w.hour,"精神百倍"
    else:
      w.set_state(AfternoonState())
      w.write_program()
class AfternoonState(State):
  def write_program(self, w):
    if w.hour < 17:
      print "当前时间:%s点,"%w.hour,"状态还行,继续努力"
    else:
      w.set_state(EveningState())
      w.write_program()
class EveningState(State):
  def write_program(self, w):
    if w.hour < 21:
      print "当前时间:%s点,"%w.hour,"加班呢,疲劳了"
    else:
      w.set_state(SleepState())
      w.write_program()
class SleepState(State):
  def write_program(self, w):
    print "当前时间:%s点,"%w.hour,"不行了,睡着了"
if __name__=="__main__":
  work = Work()
  work.hour = 9
  work.write_program()
  work.hour = 15
  work.write_program()
  work.hour = 20
  work.write_program()
  work.hour = 22
  work.write_program()

运行结果:

当前时间:9点, 精神百倍
当前时间:15点, 状态还行,继续努力
当前时间:20点, 加班呢,疲劳了
当前时间:22点, 不行了,睡着了

上面类的设计如下图:

Python设计模式之状态模式原理与用法详解

应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化

(当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变他的行为)

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 元组(Tuple)操作详解
Mar 11 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
python 穷举指定长度的密码例子
Apr 02 Python
Python如何实现线程间通信
Jul 30 Python
Python通过队列来实现进程间通信的示例
Oct 14 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 #Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 #Python
matplotlib.pyplot绘图显示控制方法
Jan 15 #Python
python实现彩色图转换成灰度图
Jan 15 #Python
Python中new方法的详解
Jan 15 #Python
Python之循环结构
Jan 15 #Python
python实现图片彩色转化为素描
Jan 15 #Python
You might like
PHP 程序员应该使用的10个组件
2009/10/31 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
js网页实时倒计时精确到秒级
2014/02/10 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
python获取远程图片大小和尺寸的方法
2015/03/26 Python
介绍Python中的文档测试模块
2015/04/28 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python切片操作深入详解
2018/07/27 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
python实现三壶谜题的示例详解
2020/11/02 Python
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
历史专业个人求职信范文
2013/12/07 职场文书
教师四风问题整改措施
2014/09/25 职场文书
2014年民政工作总结
2014/11/26 职场文书
大学感恩节活动总结
2015/05/05 职场文书
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL