意圖:
動態地給一個對象添加一些額外的職責。就增長功能來講,Decorator 模式相比生成子類更爲靈活。
適用性:python
在不影響其餘對象的狀況下,以動態、透明的方式給單個對象添加職責。spa
處理那些能夠撤消的職責。code
當不能採用生成子類的方法進行擴充時。一種狀況是,可能有大量獨立的擴展,爲支持每一種組合將產生大量的子類,使得子類數目呈爆炸性增加。另外一種狀況多是由於類定義被隱藏,或類定義不能用於生成子類。對象
#!/usr/bin/python #coding:utf8 ''' Decorator ''' 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()