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使用win32com在百度空间插入html元素示例
Feb 20 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
Python获取当前路径实现代码
May 08 Python
Python函数式编程
Jul 20 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python内置函数delattr的具体用法
Nov 23 Python
分享vim python缩进等一些配置
Jul 02 Python
python 将有序数组转换为二叉树的方法
Mar 26 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 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过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
Open and Print a Word Document
2007/06/15 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
django实现前后台交互实例
2017/08/07 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
对python调用RPC接口的实例详解
2019/01/03 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
Gap工厂店:Gap Factory
2017/11/02 全球购物
几个SQL的面试题
2014/03/08 面试题
实习生的自我评价
2014/01/08 职场文书
我的梦想演讲稿
2014/04/30 职场文书
办公室岗位职责范本
2015/04/11 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
浅谈Redis的几个过期策略
2021/05/27 Redis
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
Python实现视频中添加音频工具详解
2021/12/06 Python