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操作mysql中文显示乱码的解决方法
Oct 11 Python
python去除所有html标签的方法
May 05 Python
Pycharm远程调试openstack的方法
Nov 21 Python
pandas删除指定行详解
Apr 04 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python让函数不返回结果的方法
Jun 22 Python
python中加背景音乐如何操作
Jul 19 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
python 基于Apscheduler实现定时任务
Dec 15 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
php简单压缩css样式示例
2016/09/22 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
JS调试必备的5个debug技巧
2014/03/07 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
python发腾讯微博代码分享
2014/01/10 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
Python3 中文文件读写方法
2018/01/23 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
python变量的存储原理详解
2019/07/10 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
大班幼儿评语大全
2014/04/30 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2014年底个人工作总结
2015/03/10 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
意外事故赔偿协议书
2016/03/22 职场文书