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实现根据月份和日期得到星座的方法
Mar 27 Python
Python自动登录126邮箱的方法
Jul 10 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
django 在原有表格添加或删除字段的实例
May 27 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
python中数据库like模糊查询方式
Mar 02 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
python实现自动清理文件夹旧文件
May 10 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
基于MySQL体系结构的分析
2013/05/02 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
微信小程序实现滑动删除效果
2017/05/19 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python开发中module模块用法实例分析
2015/11/12 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
母亲80寿诞答谢词
2014/01/16 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
小班教师个人总结
2015/02/05 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
同事欢送会致辞
2015/07/31 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书