微信号:grzlwx

介绍:光荣之路官方资讯

Python设计模式——状体模式

2016-02-05 22:44 光荣之路

吴老的《selenium webdriver 实战宝典》出版了!

相关阅读
Python设计模式——
装饰模式(Decorator)
Python设计模式——代理模式(Proxy)
Python设计模式——工厂方法模式(FactoryMethod)
Python设计模式——模版方法模式

Python设计模式——外观模式

Python设计模式——单例模式

Python设计模式——建造者模式

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的时间来做相应的处理,这种做的好处是十分灵活,每个状态都有自己的判断逻辑。拓展和维护起来都比较方便。

(作者:Xjng 来源:http://www.cnblogs.com/Xjng/p/4044399.html)

公益传播测试知识、技能与正能量!感谢作者!
分享测试生活,思考测试人生!欢迎投稿!
文章图片来自网络,如有侵权请见谅,请联系我们妥善处理。
735821166@qq.com

光荣之路
软件测试培训


官网:www.gloryroad.cn

微信公众号:gloryroadtrain

性能测试QQ群:415987441
测试招聘QQ群: 203715128
自动化3群QQ: 371211499

Python群:457561756

 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 【测试技术】良好的测试用例管理对测试执行的益处 Python标准库06 子进程 (subprocess包) 关于 OS X El Capitan,知道这些就够了 最美应用-从 Android 研发工程师的角度 の 最美时光 敏捷破冰之旅(八)