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设计模式之门面模式
一.结构型设计模式 门面模式与单例模式,工厂模式不同,它是一种结构型模式. 结构型模式描述如何将对象和类组合成更大的结构 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之 ...
随机推荐
- innodb_strict_mode=1
从MySQL5.5.X版本开始,你可以开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能.开启此功能后,当创建表(CREATE TABLE).更改表(ALTER TABLE)和 ...
- Linux性能优化--CPU[备忘]
http://kumu-linux.github.io/blog/2014/04/21/performance-cpu/
- 使用日志服务LogHub替换Kafka
https://yq.aliyun.com/articles/35979#index_section
- css实现“固定表头带滚动条”的table
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 关于Spring中AOP的理解
AOP简介[理解][重点] 1.AOP(Aspect Oriented Programing)面向切面/方面编程 2.AOP隶属软件工程的范畴,指导开发人员如何制作开发软件,进行结构设计 3.AOP联 ...
- php中的匿名函数(Anonymous functions)和闭包函数(closures)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...
- git svn 简易同时使用
这个方法适合于新的一个git 仓库.假如你使用的git 是最新版本,git本身提供了 git svn命令. 1. 进入一个空的目录,初始化一个空的git仓库: git svn init svn://x ...
- dedecms获取栏目下的频道列表
可以使用: {dede:channelartlist}标签 使用方法: {dede:channelartlist row='6'} <dl> <dt><a href= ...
- session的介绍与简单使用
cookie由浏览器带着,容易被篡改因为cookie很容易被篡改,所以cookie用来记住用户名,记住浏览历史等安全性要求不高的地方可以用sessin技术session技术将信息存入服务器,然后再给客 ...
- JDK Tools - jps: JVM 进程状态工具
jps(Java Virtual Machine Process Status Tool) 是 JDK 提供的一个显示当前所有 Java 进程实例的命令. 命令格式 jps [ options ] [ ...