python-装饰者模式

先来看一段代码:

# coding=utf8]

class foo(object):
    def f1(self):
        print("original f1")

    def f2(self):
        print("original f2")


class foo_decorator(object):
    def __init__(self, decoratee):
        self._decoratee = decoratee

    def f1(self):
        print("decorated f1")
        self._decoratee.f1()

    def __getattr__(self, name):
        return getattr(self._decoratee, name)

u = foo()
v = foo_decorator(u)
v.f1()
v.f2()

通过这个简单的例子,我们可以得出这样的一个结论:装饰器类就是来包裹一下其它的类。
看一下具体的详细定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
这里对照一下我们的代码,这个装饰器就是包裹一下真实的foo类,从而达到动态扩展一个对象功能的目的。这里的动态两字很重要,我们有时候在个别的地方需要扩展一下一个类,这时候肿么办?就可以使用装饰者模式,方便,快捷,但是不能滥用,这样会使代码中充斥着大量的我们临时用用的类,不便于管理。

装饰者模式和适配器模式特别相似,下节我们来讲适配器模式,并且来说一说两者的一些差别。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,343评论 4 67
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,959评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,951评论 19 139
  • 这不是一篇合格的打卡文章,过去的48小时狼狈的程度甚至超越了产后那些艰难时刻,突如其来的评职称任务,匆匆忙忙准备材...
    kitty的幸福生活阅读 231评论 2 0
  • 一边顾着她,一边开了门,扶她进了屋之后,易开心一下仰坐在沙发上,却是沉默了下来。欢颜给她换了鞋,斟了水喂她喝下后,...
    小黑白Jade阅读 541评论 0 2

友情链接更多精彩内容