本文实例讲述了Python设计模式之装饰模式。分享给大家供大家参考,具体如下:
装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
下面是一个给人穿衣服的过程,使用装饰模式:
#!/usr/bin/env html" target="_blank">python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式——装饰模式 装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 特点: 有效的把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑 """ # 定义对象接口 class Person(object): def __init__(self,name): self.name = name def show(self): print "装扮的%s"%self.name #装饰类 class Finery(Person): def __init__(self): pass def Decorate(self,componet): self.componet = componet def show(self): if self.componet != None: self.componet.show() #装扮——T恤 class TShirts(Finery): def __init__(self): pass def show(self): print 'T恤' self.componet.show() #装扮——大裤衩 class BigTrouser(Finery): def __init__(self): pass def show(self): print '大裤衩' self.componet.show() # 装扮——人字拖 class FlipFlops(Finery): def __init__(self): pass def show(self): print '人字拖' self.componet.show() if __name__ == '__main__': p = Person('Andy') ff = FlipFlops() bt = BigTrouser() ts = TShirts() ff.Decorate(p) bt.Decorate(ff) ts.Decorate(bt) ts.show()
运行结果:
T恤
大裤衩
人字拖
装扮的Andy
这几个类的设计如下图:
通过一个个继承自装饰类Finery的对象,实现给Person类赋予职责的功能,Person类并不会感知Finery的存在
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
本文向大家介绍php设计模式之装饰模式应用案例详解,包括了php设计模式之装饰模式应用案例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php设计模式之装饰模式。分享给大家供大家参考,具体如下: 介绍 装饰者模式(Decorator Pattern)允许你向一个现有的对象添加新的功能,同时又不改变其结构。 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了
介绍 装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。 装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。 正文 那么装饰者模式有什么好处呢?前面说了,装饰者是一种实现继承的替代方案。当脚本运行时,在子类中增加行为会影响原有类所有的实例,而
本文向大家介绍PHP设计模式之装饰者模式代码实例,包括了PHP设计模式之装饰者模式代码实例的使用技巧和注意事项,需要的朋友参考一下 定义: 装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。 角色: Component(被装饰对象基类) ConcreteComponen
本文向大家介绍Python设计模式之代理模式实例详解,包括了Python设计模式之代理模式实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 运行结果: jiaojiao 送你洋娃娃 jiaojiao 送你花 jiaojiao 送你巧克
本文向大家介绍Python设计模式之策略模式实例详解,包括了Python设计模式之策略模式实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python设计模式之策略模式。分享给大家供大家参考,具体如下: 策略模式(Strategy Pattern):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 下面是一个商场活动的实现 运行
本文向大家介绍javascript设计模式之装饰者模式,包括了javascript设计模式之装饰者模式的使用技巧和注意事项,需要的朋友参考一下 在js函数开发中,想要为现有函数添加与现有功能无关的新功能时,按普通思路肯定是在现有函数中添加新功能的代码。这并不能说错,但因为函数中的这两块代码其实并无关联,后期维护成本会明显增大,也会造成函数臃肿。 比较好的办法就是采用装饰器模式。在保持现有函数及其内