Python设计模式——状体模式
需求,根据当前的时间,返回工作状态
#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' def get_state(hour):
if hour>=8 and hour<=12:
return '上午工作,精神百倍'
elif hour>12 and hour<=14:
return '中午工作,困,想午休'
elif hour>14 and hour<=18:
return '下午工作,状态不错'
elif hour>18 and hour<=20:
return '加班了,状态不太好'
else:
return '不行了,要睡觉了'
if __name__=='__main__': for hour in (9,11,12,13,14,17,19,22,23):
print '%d点,'%hour,get_state(hour)
缺点是,如果状态非常多时,(现在是5种),这段代码将会非常长,所以后期维护就比较困难
状态模式
#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' from abc import ABCMeta, abstractmethod class State():
__metaclass__ = ABCMeta @abstractmethod
def write_code(self):
pass class Morning(State):
def write_code(self, work):
if work.hour <= 12 and work.hour > 8:
print '上午工作,精神百倍'
else: work.set_status(Noon())
work.write_code(work) class Noon(State):
def write_code(self, work):
if work.hour <= 14 and work.hour>12 :
print '中午工作,困,想午休'
else:
work.set_status(Afternoon())
work.write_code(work) class Afternoon(State):
def write_code(self, work):
if work.hour <= 18 and work.hour>14:
print '下午工作,状态不错'
else:
work.set_status(Eve())
work.write_code(work) class Eve(State):
def write_code(self, work):
if work.hour <= 22 and work.hour>18:
print '加班了,状态不太好'
else:
work.set_status(Night())
work.write_code(work) class Night(State):
def write_code(self, work):
if work.hour <= 8 or work.hour > 22:
print '不行了,要睡觉了'
else:
work.set_status(Morning())
work.write_code(work) class Work():
def __init__(self, hour):
self.hour = hour
self.state = Morning() def set_status(self, state):
self.state = state def write_code(self, work):
self.state.write_code(work) if __name__ == '__main__':
work = Work(10)
for hour in (9, 11, 12, 13, 14, 17, 19, 22, 23,12):
work.hour = hour
print '%d点,' % hour
work.write_code(work)
状态模式中,定义一个状态的抽象类,为每一种状态建一个类,类中有一个handle函数(这里是write_code),来根据work的时间来做相应的处理,这种做的好处是十分灵活,每个状态都有自己的判断逻辑。拓展和维护起来都比较方便。
Python设计模式——状体模式的更多相关文章
- Python设计模式之MVC模式
# -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...
- python设计模式之模板模式
python设计模式之模板模式 编写优秀代码的一个要素是避免冗余.在面向对象编程中,方法和函数是我们用来避免编写冗余代码的重要工具. 现实中,我们没法始终写出100%通用的代码.许多算法都有一些(但并 ...
- python设计模式之状态模式
python设计模式之状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态 ...
- python设计模式之解释器模式
python设计模式之解释器模式 对每个应用来说,至少有以下两种不同的用户分类. [ ] 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就 ...
- python设计模式之命令模式
python设计模式之命令模式 现在多数应用都有撤销操作.虽然难以想象,但在很多年里,任何软件中确实都不存在撤销操作.撤销操作是在1974年引入的,但Fortran和Lisp分别早在1957年和195 ...
- python设计模式之外观模式
python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...
- python设计模式之原型模式
python设计模式之原型模式 对于原型模式而言,其中最主要的部分就是关于一个对象的复制,其中就包含两个方面:1.浅复制:2.深复制.具体的区别请看我相关的随笔.这里简略的说明一下,浅复制就等于对 ...
- python设计模式之建造者模式
python设计模式之建造者模式 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...
- python设计模式之门面模式
一.结构型设计模式 门面模式与单例模式,工厂模式不同,它是一种结构型模式. 结构型模式描述如何将对象和类组合成更大的结构 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之 ...
随机推荐
- 第十一章 Function类型
在ECMAScript中,Function(函数)类型实际上是对象.每个函数也是Function类型的实例,而且都与其它引用类型一样具有属性和方法.由于是函数对象,因此函数名实际上也是一个指向函数对象 ...
- C#_dropdownlist_1
关于ASP.net MVC 中DropDownList绑定与提交数据 在做 ASP.net MVC项目中,数据绑定也是很关键的,现在以个人经验与大家交流下 ASP.net MVC 中DropDow ...
- 自定义控件(视图)1期笔记01:View 和 ViewGroup
1.View 和 ViewGroup 图解关系: 2. View 和 ViewGroup 关系和作用: (1) 关系: • 继承关系 • 组合关系 (2) 作用: • View的作用: 提供 ...
- five kinds of IPC methods
Shared memory permits processes to communicate by simply reading and writing to a specified memory l ...
- 有关于Algorithm的基础介绍
Niklaus Wirth:Algorithm + Data Structures = Programs 这句话呢,觉得很正确,算法和程序是不同的概念,算法的思想呢有递推,枚举,分治,贪婪,试探法,模 ...
- python2 dir(list)
>>> dir(list) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__del ...
- get请求在ie浏览器下有缓存
今天做项目的时候,数据库有新数据更新后,发现页面的行为却没有更新: 打断点调试的时候,发现程序也不进方法: 最终发现是因为请求数据的时候使用了get请求,而且在IE10下导致的: 注:IE浏览器中使用 ...
- PHP实现http与https转化
http://zyan.cc/post/142/ 最近在写PHP程序时,需要使浏览器在https和http之间转化,上网搜索相关信息,无奈只有最近在写PHP程序时,需要使浏览器在https和http之 ...
- [04] SQL语句优化之索引
1.索引的概念 根据书的目录可以知道内容所在的页码,不用一页一页翻书,可直接通过页码找到内容.数据库的索引类似于书本的目录,索引指向内容存储位置,可直接定位到内容而不必扫描整张表,减少了磁盘的I/O次 ...
- aix 计算性内存和文件内存
经过有客户问AIX topas中内存(memory)一项显示的数值含义: MEMORY Real,MB 4096 % Comp 68.9 % Noncomp 22.6 % Clie ...