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 算法 排序实现快速排序
Jun 05 Python
python中List的sort方法指南
Sep 01 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
Python+微信接口实现运维报警
Aug 27 Python
Python实现自动上京东抢手机
Feb 06 Python
python定时关机小脚本
Jun 20 Python
Python多线程原理与用法详解
Aug 20 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
python中JWT用户认证的实现
May 18 Python
详解python如何引用包package
Jun 07 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
Pygame Event事件模块的详细示例
Nov 17 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运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
python3中bytes和string之间的互相转换
2017/02/09 Python
python 实现UTC时间加减的方法
2018/12/31 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
python微信公众号开发简单流程实现
2020/03/09 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
python开发入门——列表生成式
2020/09/03 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
this关键字的作用
2016/01/30 面试题
九年级语文教学反思
2014/02/04 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2015年专项整治工作总结
2015/04/03 职场文书