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如何实现int函数的方法示例
Feb 19 Python
python unittest实现api自动化测试
Apr 04 Python
对python使用http、https代理的实例讲解
May 07 Python
pycharm设置注释颜色的方法
May 23 Python
python操作mysql代码总结
Jun 01 Python
Django开发中的日志输出的方法
Jul 02 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
python实现学员管理系统
Feb 26 Python
python实现抠图给证件照换背景源码
Aug 20 Python
python 命名规范知识点汇总
Feb 14 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
Python3爬虫RedisDump的安装步骤
Feb 20 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性能的原理介绍
2012/09/05 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
Javascript继承机制详解
2017/05/30 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
python生成验证码图片代码分享
2016/01/28 Python
Python三级菜单的实例
2017/09/13 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python list运算操作代码实例解析
2020/01/20 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
python实现银行账户系统
2021/02/22 Python
培训主管岗位职责
2014/02/01 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
表扬稿格式范文
2015/01/16 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
青年联谊会致辞
2015/07/31 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
Python日志模块logging用法
2022/06/05 Python