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 排列组合之itertools
Mar 20 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
详解Python进程间通信之命名管道
Aug 28 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
python调用c++传递数组的实例
Feb 13 Python
Python列表切片操作实例总结
Feb 19 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
python实现坦克大战
Apr 24 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
如何基于python实现单目三维重建详解
Jun 25 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 GD 图像处理组件的常用函数总结
2010/04/28 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
JavaScript作用域链实例详解
2019/01/21 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[02:27]刀塔重生降临
2015/10/14 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python实现快速多线程ping的方法
2015/07/15 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
详解python中的模块及包导入
2019/08/30 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
法律专业自荐信
2014/06/03 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
财务个人年度总结范文
2015/02/26 职场文书
士兵突击观后感
2015/06/16 职场文书
SQL基础的查询语句
2021/11/11 MySQL