Python设计模式之装饰模式实例详解

 更新时间:2019年01月21日 14:27:15   作者:Andy冉明  
这篇文章主要介绍了Python设计模式之装饰模式,结合实例形式详细分析了装饰模式的概念、原理并结合Python实例形式分析了装饰模式的相关使用技巧,需要的朋友可以参考下

本文实例讲述了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

这几个类的设计如下图:

通过一个个继承自装饰类Finery的对象,实现给Person类赋予职责的功能,Person类并不会感知Finery的存在

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • 基于Python利用Faker批量测试数据

    基于Python利用Faker批量测试数据

    这篇文章主要介绍了基于Python利用Faker批量测试数据。测试过程中,经常需要批量去造数据,方法有很多,最简单方便的应该是使用python 的一个三方库Faker。下面我们就来看看三方库Faker如何批量测试数据,需要的朋友可以参考一下
    2022-03-03
  • Python交换变量

    Python交换变量

    Python美味第一顿,来个方便快捷的变量交换!为什么是Python?!因为Python中交换变量不需要临时变量!
    2008-09-09
  • 利用Python实现原创工具的Logo与Help

    利用Python实现原创工具的Logo与Help

    这篇文章主要给大家介绍了关于如何利用Python实现原创工具的Logo与Help的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-12-12
  • Python读写docx文件的方法

    Python读写docx文件的方法

    今天小编就为大家分享一篇Python读写docx文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python实现将mp3音频格式转换为wav格式

    Python实现将mp3音频格式转换为wav格式

    这篇文章主要介绍了利用python写了这个小工具,可以批量进行mp3音频格式转换为wav格式,文中的示例代码讲解详细,感兴趣的可以学习一下
    2022-01-01
  • Python Image模块基本图像处理操作小结

    Python Image模块基本图像处理操作小结

    这篇文章主要介绍了Python Image模块基本图像处理操作,结合实例形式总结分析了Python图形处理模块Image常用的图形处理函数、功能及相关使用技巧,需要的朋友可以参考下
    2019-04-04
  • python3爬虫学习之数据存储txt的案例详解

    python3爬虫学习之数据存储txt的案例详解

    这篇文章主要介绍了python3爬虫学习之数据存储txt的案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python Pandas数据处理高频操作详解

    Python Pandas数据处理高频操作详解

    这篇文章主要为大家整理了一些Python Pandas数据处理高频操作,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2022-06-06
  • 一文解密Python中的垃圾回收

    一文解密Python中的垃圾回收

    我们知道,python 是一种高级编程语言,它提供了自动内存管理的功能,即垃圾回收机制,所以本文就来聊聊python的垃圾回收机制是如何实现的以及具体是使用,感兴趣的可以了解下
    2023-09-09
  • Python中作用域的规则与应用

    Python中作用域的规则与应用

    在 Python 编程中,作用域(Scope) 是指一个变量可以被访问和引用的范围,这篇文章主要为大家介绍了Python中作用域的规则与应用的相关知识,需要的可以了解下
    2025-01-01

最新评论