Python设计模式之装饰模式实例详解


Posted in Python onJanuary 21, 2019

本文实例讲述了Python设计模式之装饰模式。分享给大家供大家参考,具体如下:

装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.

下面是一个给人穿衣服的过程,使用装饰模式:

#!/usr/bin/env 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

这几个类的设计如下图:

Python设计模式之装饰模式实例详解

通过一个个继承自装饰类Finery的对象,实现给Person类赋予职责的功能,Person类并不会感知Finery的存在

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 远程统计文件代码分享
May 14 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python操作json的方法实例分析
Dec 06 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
python使用selenium实现批量文件下载
Mar 11 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
python利用opencv保存、播放视频
Nov 02 Python
利用python进行文件操作
Dec 04 Python
python中编写函数并调用的知识点总结
Jan 13 Python
python利用Tesseract识别验证码的方法示例
Jan 21 #Python
对python过滤器和lambda函数的用法详解
Jan 21 #Python
利用Python正则表达式过滤敏感词的方法
Jan 21 #Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 #Python
opencv python统计及绘制直方图的方法
Jan 21 #Python
python numpy 按行归一化的实例
Jan 21 #Python
python树莓派红外反射传感器
Jan 21 #Python
You might like
php对象在内存中的存在形式分析
2015/02/03 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
详解php实现页面静态化原理
2017/06/21 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jquery 使用简明教程
2014/03/05 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
财务部岗位职责
2013/11/19 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
工作睡觉检讨书
2014/02/25 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书