装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.

下面是一个给人穿衣服的过程,使用装饰模式:

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. __author__ = 'Andy'
  5.  
  6. """
  7. 大话设计模式
  8. 设计模式——装饰模式
  9. 装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
  10. 特点: 有效的把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑
  11. """
  12.  
  13. # 定义对象接口
  14. class Person(object):
  15.  
  16. def __init__(self,name):
  17. self.name = name
  18.  
  19. def show(self):
  20. print "装扮的%s"%self.name
  21.  
  22. #装饰类
  23. class Finery(Person):
  24.  
  25. def __init__(self):
  26. pass
  27.  
  28. def Decorate(self,componet):
  29. self.componet = componet
  30.  
  31. def show(self):
  32. if self.componet != None:
  33. self.componet.show()
  34.  
  35. #装扮——T恤
  36. class TShirts(Finery):
  37.  
  38. def __init__(self):
  39. pass
  40.  
  41. def show(self):
  42. print 'T恤'
  43. self.componet.show()
  44.  
  45. #装扮——大裤衩
  46. class BigTrouser(Finery):
  47.  
  48. def __init__(self):
  49. pass
  50.  
  51. def show(self):
  52. print '大裤衩'
  53. self.componet.show()
  54.  
  55. # 装扮——人字拖
  56. class FlipFlops(Finery):
  57.  
  58. def __init__(self):
  59. pass
  60.  
  61. def show(self):
  62. print '人字拖'
  63. self.componet.show()
  64.  
  65. if __name__ == '__main__':
  66. p = Person('Andy')
  67. ff = FlipFlops()
  68. bt = BigTrouser()
  69. ts = TShirts()
  70. ff.Decorate(p)
  71. bt.Decorate(ff)
  72. ts.Decorate(bt)
  73. ts.show()

这几个类的设计如下图:

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

作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

大话设计模式Python实现-装饰模式的更多相关文章

  1. 大话设计模式--Python

    作者:五岳 出处:http://www.cnblogs.com/wuyuegb2312 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一 ...

  2. 大话设计模式C++版——装饰模式

    女人常说男人喜新厌旧,只见新人笑,那闻旧人哭,但装饰模式(Decorator)却是一种结交新朋友不忘老朋友的设计模式,非常适合去古代当老公(现代是不行的,因为只能娶一个老婆了).装饰模式的本质是每一个 ...

  3. 大话设计模式Python实现-迭代器模式

    迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式的demo: #!/usr/bin/env python # - ...

  4. 大话设计模式Python实现-解释器模式

    解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/ ...

  5. 大话设计模式Python实现- 享元模式

    享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: #!/usr/bin/env python # -*- coding:utf- ...

  6. 大话设计模式Python实现-中介者模式

    中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互. 下面是一个中介者模式的demo ...

  7. 大话设计模式Python实现-职责链模式

    职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...

  8. 大话设计模式Python实现-命令模式

    命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 下面是一个命令模式的demo: #!/usr/bi ...

  9. 大话设计模式Python实现-桥接模式

    桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 下面是一个桥接模式的demo: #!/usr/bin/env python # -*- coding: ...

随机推荐

  1. Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象

    部分一 14年底进入目前公司时,领导准备开发一款新软件平台以取代原有平台.原平台采用C++Build开发界面(window c/s客户端) .Visual Studio(封装dll模块).过完年,领导 ...

  2. CentOS7/Ubuntu18系统时间同步ntp(转载)

    转自  https://blog.csdn.net/u010226454/article/details/80896959 ---centos7.2上搭建ntp服务器,并实现时间同步 对于容器编排系统 ...

  3. LinuxShell——特殊符号

    LinuxShell——特殊符号 摘要:本文主要学习了Shell命令中具有特殊功能的一些符号. 多命令执行 顺序执行“;” 如果使用“;”连接多条命令,那么这些命令会依次执行,但是各命令之间没有任何逻 ...

  4. Python基础18

    “为什么有列表,还要元组?” 1. 元组可看成是简单的对象组合,而列表是随时间改变的数据集合. 2. 元组的不可变特性提供了某种完整性,确保元组不会被另一个引用来修改.类似于其它语言中的常数声明.

  5. maven 学习---Maven Web应用

    本教程将教你如何管理使用Maven版本控制系统管理一个基于Web项目.在这里,将学习如何创建/构建/部署和运行Web应用程序: 创建Web应用程序 要创建一个简单的java web应用程序,我们将使用 ...

  6. jQuery的animate

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. MacOS上传文件到windows ftp时链接文件不见了

    最近打包遇到了一个问题,打包完MAC的sdk包后,得到的是一个framework的文件夹,我们需要将这个framework传到ftp服务器上,另外,还要把这个文件夹下的Release文件夹里的文件替换 ...

  8. %STSADM% -o addsolution -filename AEMediaPlayerWebpart.wsp

    SET STSADM="c:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\bin\STSADM. ...

  9. TCP数据报结构以及三次握手(九)

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接. 客户端在收发数据前要 ...

  10. 2019 AI 100 Startups