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基于phantomjs实现导入图片
May 13 Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
python 列表删除所有指定元素的方法
Apr 19 Python
Python应用库大全总结
May 30 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
在pycharm中显示python画的图方法
Aug 31 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
基于python监控程序是否关闭
Jan 14 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
Python类方法总结讲解
Jul 26 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中webservice实现的简单架构方法及实例
2015/02/03 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
javascript编程起步(第五课)
2007/02/27 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
JS高级运动实例分析
2016/12/20 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
竟聘演讲稿范文
2013/12/31 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
装修五一活动策划案
2014/01/23 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
个人合伙协议书范本
2014/10/14 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
英语导游词
2015/02/13 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript