python设计模式(八):装饰模式

python之战 2019-03-12

python 函数 面向对象

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。


在Python种实现动态扩展对象功能的方法,最简单的是通过复写__getattr__函数,在getattr种写入我们需要扩展的功能,实例代码如下:

2019-03-12-20_38_53.png


特点

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。

(2) 装饰对象包含一个真实对象的引用(reference)

(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。

(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。


设计原则

1. 多组合,少继承。

利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。

2. 类应设计的对扩展开放,对修改关闭。

登录 后评论
下一篇
我是小助手
32505人浏览
2019-07-31
相关推荐
全栈Python 编程必备
303人浏览
2017-12-20 14:16:57
python的面向对象和类
505人浏览
2018-07-01 19:04:00
设计模式系列-享元模式
246人浏览
2010-12-12 15:13:00
Python-装饰器详解
596人浏览
2017-10-18 12:10:00
Python Decorator Closure
687人浏览
2017-05-02 15:35:00
Python装饰器模式学习总结
500人浏览
2016-05-21 11:57:00
python 高级
495人浏览
2017-11-16 18:10:00
python 装饰器解析
6365人浏览
2018-03-27 17:52:18
设计模式系列-装饰模式
233人浏览
2010-12-11 20:41:00
0
0
0
359