博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python设计模式(三)--装饰器模式
阅读量:6518 次
发布时间:2019-06-24

本文共 1451 字,大约阅读时间需要 4 分钟。

hot3.png

最近正在持续更新源码库,代码都是参考大话设计模式翻成python版,完整代码片段请到github上去下载.

https://github.com/zhengtong0898/python-patterns

 

参考:

    书籍<<大话设计模式>> 第六章

 

Python 3.x

# -.- coding:utf-8 -.-# __author__ = 'zhengtong'# 继承的方式面对变幻莫测的服装搭配, 立马凌乱无比.# 其他模式的选型: 建造者模式# 嗯,虽然建造者模式是内部组装完毕,但是建造者模式要求# 建造的过程必须是稳定的,而服装搭配的过程是非固定的,所以。。# 再选择其他的模式: 装饰器模式# 装饰器模式,动态的给一个对象添加一些额外的职责,就增加功能来说# 装饰器比生成子类更为灵活.# 最终的效果是解决每个类都单独show()的过程.from functools import wrapsdef decorate(func, finery):    @wraps(func)    def wrap(*args, **kwargs):        return '{0} {1}'.format(finery, func(*args, **kwargs))    return wrapdef big_trouser(func):    return decorate(func, "垮裤")def tsherts(func):    return decorate(func, "大T恤")def sneaker(func):    return decorate(func, "破球鞋")def suit(func):    return decorate(func, "西装")def tie(func):    return decorate(func, "领带")def leather_shoes(func):    return decorate(func, "皮鞋")class Main:    def __init__(self, name):        self.name = name    @big_trouser    @tsherts    def one(self):        print('第一种装扮')        return self.show()    @leather_shoes    @tie    @suit    def two(self):        print('第二种装扮')        return self.show()    @sneaker    @leather_shoes    @big_trouser    @tie    def three(self):        print('第三种装扮')        return self.show()    def show(self):        return '装扮的{0}'.format(self.name)if __name__ == '__main__':    xc = Main('小菜')    print(xc.one())    print(xc.two())    print(xc.three())

 

转载于:https://my.oschina.net/zhengtong0898/blog/674080

你可能感兴趣的文章
《SEO的艺术(原书第2版)》——1.5 人们如何搜索
查看>>
经验贴 | 电梯监控的布线技巧
查看>>
唐山联通与丰南区政府签署“智慧城市”战略合作协议
查看>>
研究显示:广告拦截应用正在破坏互联网
查看>>
优云·小课堂 第八期:运维自动化的魅力
查看>>
稳定+性能+价格,阿里云发力ECS企业级产品
查看>>
写个软件来防止服务器网站CPU百分百
查看>>
智能城市里,“公共电话亭”的存在意味着什么?
查看>>
JVM分代垃圾回收策略的基础概念
查看>>
《交互式程序设计 第2版》一3.5 捕获简单用户交互行为
查看>>
安装操作系统需要注意的事项
查看>>
5G技术的5大猜想
查看>>
MongoDB 3.0(1):CentOS7 安装MongoDB 3.0服务
查看>>
别随便安装 Pokemon GO被曝藏恶意后门
查看>>
BBC即将推出Britflix流媒体服务:欲成为英国版Netflix
查看>>
让数据会思考会说话,为出海企业提供多样化数据智能解决方案
查看>>
我眼中的自动化测试框架设计要点
查看>>
FLIF:自由的无损图像格式
查看>>
《计算机系统:核心概念及软硬件实现(原书第4版)》——3.7 总结
查看>>
Google开源Inception-ResNet-v2,提升图像分类水准
查看>>