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类,从而达到动态扩展一个对象功能的目的。这里的动态两字很重要,我们有时候在个别的地方需要扩展一下一个类,这时候肿么办?就可以使用装饰者模式,方便,快捷,但是不能滥用,这样会使代码中充斥着大量的我们临时用用的类,不便于管理。

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

你可能感兴趣的:(python-装饰者模式)