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使用cookielib库示例分享
Mar 03 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
介绍Python中的一些高级编程技巧
Apr 02 Python
python获取多线程及子线程的返回值
Nov 15 Python
TensorFlow实现Batch Normalization
Mar 08 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
在keras中实现查看其训练loss值
Jun 16 Python
python图片合成的示例
Nov 09 Python
python动态规划算法实例详解
Nov 22 Python
Python语言内置数据类型
Feb 24 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适配器模式介绍
2012/08/14 PHP
php中explode函数用法分析
2014/11/15 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
10个php函数实用却不常见
2015/10/13 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
让python在hadoop上跑起来
2016/01/27 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
对Python实现累加函数的方法详解
2019/01/23 Python
python将字母转化为数字实例方法
2019/10/04 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
python安装后的目录在哪里
2020/06/21 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
土木工程专业个人求职信
2013/12/30 职场文书
中国好声音华少广告词
2014/03/17 职场文书
期中考试反思800字
2014/05/01 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
团结友爱主题班会
2015/08/13 职场文书