有时候,我们想通过一个类来调用另一个类里的方法来处理请求,即这两个类对象参与处理同一个请求对象,只不过一个是 委托者 ,一个是 处理者 。
比如我们现在有一个名为dog的类对象,我们希望通过它调用 voice 类产生“狗吠 ” 声,这时候就可以采用 委托模式 。下面就用python来理解这个设计模式。
python里,在委托者类对象中,需要这么设计:
1. 重写__getattr__方法,使得委托者获得处理者的属性。
2. 判断该属性是否为可调用函数,如果不是则直接返回,如果是,则用 wrapper 封装为可调用对象。
如下所示:
这样做的好处是,处理者(被委托者)不需要做太多的更改,一般是一个公用类。我们的处理者如下:
这样就可以通过委托者来调用另一个类的方法来对请求进行处理:
if __name__ == '__main__': john = dog(voice()) john.words('汪汪')实际上,如果你不重写__getattr__,一样可以用以下的方式调用到voice类:
if __name__ == '__main__': john = dog(voice()) john.voice.words('汪汪')这两种有什么区别?使用委托模式,可以简化代码,优化可读性,你不需要再调用voice对象, 委托者自己会利用 getattr 找到相应的对象里的方法。
不过,在python里,委托模式这样的写法其实是 un-pythonic 的,因为它将调用的方法隐藏在了执行者中, 可读性比较差。如果不是特殊需要,我们一般不会这么做,这里只是给大家展示如何用python来理解这个设计模式。
新能源汽车技术7--新能源汽车的充电系统
铝基板耐压测试怎样操作
LED发光原理及特性介绍
99元65W超值,首款内置中国芯氮化镓快充深度拆解!
韩国法庭裁决高通罚款8.7亿美元,存在不公平商业行为
如何用Python来理解委托模式
小米将投入巨大资金发展5G+AI+IoT下一代超级互联网
DEVICENET转ETHERCAT网关连接ethercat总线伺服如何控制
华晨宝马X1混动版将上市 百公里油耗达恐怖1.8L!
想学好单片机,先搞清楚各种周期的关系与定时器原理
谁能推荐几款性价比高的降噪耳机/耳塞?降噪耳机排行榜!
基于物联网技术下的智慧养老智能化解决方案
AMD声明GPU源码被盗不影响产品安全
如何通过开源的 TensorFlow.js BERT 模型来构建应用
Oculus Go将于5月推出多款VR社交应用
0欧姆电阻如何降额?
如何在机智云平台创建一个智能加湿器
微软Visual Studio Code已原生支持苹果M1 Mac
青岛新能源发布车牌进行时,全市受理257笔新能源汽车业务
中国联通的“四把火”,燃爆世界移动通信大会