大话设计模式之装饰模式(python实现)
大话设计模式之装饰模式
- 使用场景
- 定义
- 装饰模式结构图
- python实现装饰模式
- 代码结构图
- 优点
使用场景
建造过程不稳定,不确定。把所需的功能按照正确的顺序串联起来进行控制。
新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
定义
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
装饰模式结构图
- Component是定义一个对象接口,可以给这个对象动态添加职责,对应下文python实现中的Persion类
- Decorator继承Component类,是通过具体装饰类抽象出来的一个类,对应下文python实现中的Finery类
- ConcreteDecoratorA/ConcreteDecoratorB类,就是具体的装饰对象,继承自Decorator类,动态的给Component添加职责,对应下文python实现中的TShirt/BigTrouser/Sneaker
python实现装饰模式
#coding=utf-8
import osclass Person:def __init__(self, name):self.name = namedef show(self):print('打扮的' + self.name)class Finery(Person):def __init__(self):self.component = Nonedef decorate(self, component):self.component = componentdef show(self):if self.component is not None:self.component.show()class TShirt(Finery):def show(self):print '大T恤',self.component.show()class BigTrouser(Finery):def show(self):print '垮裤',self.component.show()class Sneaker(Finery):def show(self):print '运动鞋',self.component.show()if __name__ == '__main__':p = Person('大熊')upClothes = TShirt()downClothes = BigTrouser()shoes = Sneaker()upClothes.decorate(p)downClothes.decorate(upClothes)shoes.decorate(downClothes)shoes.show()
- 执行结果
运动鞋 垮裤 大T恤 打扮的大熊
代码结构图
优点
把类中的装饰功能从类中搬移去除,这样可以简化原有的类。有效地把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。
装饰顺序很重要。
大话设计模式之装饰模式(python实现)相关推荐
- 大话设计模式之装饰模式
装饰模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 通过下列代码加深下理解 ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- python大话设计模式
上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的 ...
- 《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- 大话设计模式--Python
作者:五岳 出处:http://www.cnblogs.com/wuyuegb2312 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到 ...
- 大话设计模式Python实现-简单工厂模式
简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 1 #!/us ...
- 大话设计模式C++版——装饰模式
女人常说男人喜新厌旧.仅仅见新人笑,那闻旧人哭,但装饰模式(Decorator)却是一种结交新朋友不忘老朋友的设计模式,很适合去古代当老公(现代是不行的.由于仅仅能娶一个老婆了).装饰模 ...
- 大话设计模式Python实现-观察者模式
观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...
- 大话设计模式—装饰模式
装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...
最新文章
- IE5下通过、不会被列表框遮挡的日期控件
- 计算机二级Office经验资源分享【一次过关。】
- 【赠书福利】不扶好眼镜,请别打开这本挑战JS语言特性的书
- java servlet dao_Java+MyEclipse+Tomcat 详解Servlet和DAO数据库增删改查操作(源码)
- 定制控件消息处理函数
- Python之路(第十六篇)xml模块、datetime模块
- Python 面向对象 —— 静态方法和类方法
- 跨域认证--使用Passport
- 修改Android emulator的IMEI
- quilt 工具增加 patch 方法
- eui怎么在名字后面显示服务器,怀旧服EUI怎么调姓名版 设置血条的方法
- 崩坏3九游服务器稳定吗,崩坏3:大佬亲身经历告诉你,玩崩坏3到底该不该压等级!...
- OpenCV开发笔记(四十九):红胖子8分钟带你深入了解轮廓识别(图文并茂+浅显易懂+程序源码)
- (五)循环神经网络 -- 3 语言模型数据集
- OSChina 周二乱弹 ——快晒晒你们公司的圣诞小姐姐啊!
- 一些恶心的代码片段,啧啧啧,是真的恶心。
- 3dm显卡测试软件,3DMark新版发布:全球第一个DirectX 12测试工具
- Buuctf Crpyto writeup --异性相吸
- ubuntu如何在多个工作区之间自由切换以及添加返回桌面图标
- About Axure(1)