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 14 Python
python文件特定行插入和替换实例详解
Jul 12 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
Python 判断奇数偶数的方法
Dec 20 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
django之自定义软删除Model的方法
Aug 14 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
python 实现的车牌识别项目
Jan 25 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函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
php判断目录存在的简单方法
2019/09/26 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
python调用c++传递数组的实例
2019/02/13 Python
Python PO设计模式的具体使用
2019/08/16 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
浅析Python 序列化与反序列化
2020/08/05 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
企业管理培训感言
2014/01/27 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
教你用python实现12306余票查询
2021/06/30 Python