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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
python实现Floyd算法
Jan 03 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
python write无法写入文件的解决方法
Jan 23 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
python opencv进行图像拼接
Mar 27 Python
python使用selenium爬虫知乎的方法示例
Oct 28 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
php fread读取文件注意事项
2016/09/24 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
通俗讲解python 装饰器
2020/09/07 Python
python性能测试工具locust的使用
2020/12/28 Python
教师实习自我鉴定
2013/12/14 职场文书
教师党员思想汇报
2014/01/06 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
小学教师节活动总结
2015/03/20 职场文书
药房管理制度范本
2015/08/06 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书