#写在前面

已经有一个礼拜多没写博客了,因为沉醉在了《妙味》这部小说里,里面讲的是一个厨师苏秒的故事。现实中大部分人不会有她的天分。我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人过。我还喜欢里面那些描写味道的文字,这会让我认真对待一日三餐。我还喜欢里面的一种态度,做事的时候要认真专注。我是个很容易急躁的人,特别是当做自己不太喜欢又不得不做的事的时候。但是很神奇,伺候花草的时候,我会一下子陶醉其中,我对花草有种痴迷的喜爱。等生活无忧的时候我会去种花,种蘑菇,像苏秒一样陶醉在自己热爱的事情里。我最喜欢的就是里面苏秒和回味的感情了,她独立,她专注于自己的事情,她有自己的世界,她不患得患失,她活在当下,她也会考虑不太远的将来。心之所向,身之所往。看完了我感觉我会让自己向自己喜欢的那种生活方式再靠拢一些。

啰嗦完了开始写今天的博客设计模式之装饰器模式

设计模式是一种类层次或者结构的的设计方式,是一种解决问题的思维方式,没有固定的公式

装饰器模式比较好理解

#引入理解装饰器

小摊上卖手抓饼,烧饼,火烧一类的都选择性加 生菜,火腿,牛肉片,鸡蛋等

老板做好的一个饼热气腾腾的,不能直接拿给顾客,要问顾客的喜好,加不加其他的东西,顾客说加牛肉片,这时候旁边的老板娘在饼上加牛肉片,然后装入袋子中,然后收钱。

这里面刚刚做好的热气腾腾的烧饼或者手抓饼就是具体的构件,

加 生菜,火腿,牛肉片,鸡蛋等 放入包装袋 这就是装饰器。

#定义

抽象构件

具体构件

抽象装饰类

具体装饰类

#角色

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

#装饰器模式的优点

1.装饰器类和被装饰器的类是独立的,你不需要懂我,我也不需要懂你,降低耦合度

2.装饰模式是继承模式的一个替代方案

#装饰器的缺点

1.会产生很多小对象

#装饰器的使用场景

1.想给一个类增加功能,但是又不想修改原来的代码,可以

2.类的核心功能不变,只是需要添加新的功能时候

#举个例子

#小摊上卖手抓饼和火烧,手抓饼5块一个,火烧6块一个,可以加辣椒酱,生菜,鸡蛋,牛肉片,火腿片
#辣椒酱免费,生菜多加1元,鸡蛋多加2元,牛肉片多加5元,火腿片多加4元
#顾客根据自己需要进行组合选择class Bing:name=''price=0.0def getPrice(self):return self.pricedef setPrice(self,price):self.price=pricedef getName(self):return self.nameclass HandHeldCake(Bing):def __init__(self):self.name='手抓饼'self.price=5class HuoShao(Bing):def __init__(self):self.name='火烧'self.price=6   class decorator:def getName(self):passdef getPrice(self):passclass spicyDecorator(decorator):def __init__(self,decorator):self.decorator=decoratordef getName(self):return '+spicy'def getPrice(self):return 0class vegatableDecorator(decorator):def __init__(self,decorator):self.decorator=decoratordef getName(self):return '+生菜'def getPrice(self):return 1class eggDecorator(decorator):def __init__(self,decorator):self.decorator=decoratordef getName(self):return '+鸡蛋'def getPrice(self):return 2class beefDecorator(decorator):def __init__(self,decorator):self.decorator=decoratordef getName(self):return '+牛肉片'def getPrice(self):return 5class peikonDecorator(decorator):def __init__(self,decorator):self.decorator=decoratordef getName(self):return '+火腿片'def getPrice(self):return 4if __name__=='__main__':hs=HuoShao()szb=HandHeldCake()print(hs.getName(),hs.getPrice())egg=eggDecorator(hs)print(hs.getName(),egg.getName(),hs.getPrice()+egg.getPrice())beef=beefDecorator(egg)print(hs.getName(),egg.getName(),beef.getName(),hs.getPrice()+egg.getPrice()+beef.getPrice())

其他的想要啥自己加就可以了

参考

https://www.cnblogs.com/noteless/p/9603041.html

http://www.imooc.com/article/258816

还参考了其他博客,忘记添加链接了

转载于:https://www.cnblogs.com/baxianhua/p/11344097.html

python 设计模式之装饰器模式 Decorator Pattern相关推荐

  1. python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  2. 【Java设计模式系列】装饰器模式(Decorator Pattern)

    简介 一般有两种方式可以给一个类或对象新增行为: 继承 子类在拥有自身方法同时还拥有父类方法.但这种是静态的,用户无法控制增加行为的方式和时机. 关联 将一个类的对象嵌入另一个对象,由另一个对象决定是 ...

  3. 极速理解设计模式系列:23.装饰器模式(Decorator Pattern)

    五个角色:部件(Component).具体部件(ConcreteComponent).装饰抽象类(Decorator).具体装饰对象(ConcreteDecorator).客户端(Client) 部件 ...

  4. python设计模式9-装饰器模式

    1. 装饰器模式(Decorator)介绍 UML类图 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为 ...

  5. 设计模式学习----装饰器模式

    这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...

  6. go设计模式之装饰器模式

    go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...

  7. c语言装饰,C/C++知识点之装饰器模式(Decorator) C++

    本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...

  8. 详解设计模式:装饰器模式

    装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是 GoF 的 23 种设计模式中的一种结构型设计模式.装饰器模式 是指在不改变原有对象的基础之上,将 ...

  9. 设计模式之装饰器模式详解

    设计模式之装饰器模式详解 文章目录 设计模式之装饰器模式详解 一.什么是装饰器模式 二.装饰器模式的角色组成 三.装饰器模式通用写法示例 四.装饰器模式业务中的应用举例 五.装饰器模式优缺点 一.什么 ...

最新文章

  1. [YTU]_1063 (输入三个整数,按由小到大的顺序输出)
  2. 清华大学冯珺:基于强化学习的关系抽取和文本分类 | 实录·PhD Talk
  3. NYOJ【士兵杀敌(二)】
  4. 韩师师范学院计算机科学与技术在哪个学区,2017年韩山师范学院本科插班生考试《数据结构》A卷...
  5. Java笔记-基于Spring Boot的SOAP双向SSL认证及WS-Security
  6. C#图解教程 第十八章 枚举器和迭代器
  7. html辅助方法以及常用属性值,ASP.NET MVC 2博客系列之一:强类型HTML辅助方法
  8. 输入输出挂,手动扩栈。
  9. 5.1 RNN 情感识别、tensorflow实现——python实战
  10. python批量复制文件夹下所有文件_python定时复制远程文件夹中所有文件
  11. python3调用arcpy地理加权回归_地理加权回归( GWR)
  12. Ubuntu 14.04解决minidwep-gtk无法启动问题
  13. Oracle Primavera P6 Unifier等产品 Patch 补丁介绍
  14. c语言 simon 游戏,终于发现少儿英语游戏SimonSays(西蒙说)
  15. python 绘图 实现图中为字体添加下标、上标
  16. 冯诺依曼体系结构VS哈佛体系结构
  17. 麻省理工学院的计算机终端,“面纱(Veil)”系统:打造真正的无痕浏览
  18. RS485自行收发的实现方法
  19. 耶鲁大学公开课:博弈论第九节(笔记)
  20. 教你使用晨曦记账本,登记管理借还款

热门文章

  1. Centos 启用网卡出现 no link present. Check cable
  2. C#控制 计算机中“服务”的启动与停止 转
  3. 如何设置硬盘安装linux,linux用硬盘安装时所设置选项
  4. Android:ViewFlipper、幻灯片
  5. 开发提效小技巧分享(一)
  6. 离散效率写给自己的话 二
  7. linux系统snmpd服务内存偏高,Red Hat Enterprise Linux 5.4 64位系统SNMP内存泄漏(上)
  8. 【马哥教育视频】cacti入门及进阶[已更新至第四段]
  9. B2C网站转化率优化
  10. [读后感] 20170630 产品经理米衙的感悟