装饰者模式通过使用继承,能够将对象一层一层地包装起来。

1,Person是被装饰的对象,装饰者模式的类图中,所有的类都继承自Person类。Person类有一个show方法,用来展示Person对象哪些服饰装饰了。通过继承,所有的类都有show方法,因此当人穿上了某种服饰之后,就可能调用该服饰的show方法展示出来。当没有任何服饰装饰人时,执行show方法就表示最初始的人。

2,抽象的服饰类继承自Person类,尽管从自然概念上讲,服饰并不是人。但这里还是使用了继承。原因之一是,这样抽象的服饰类就有了show方法,从而使得各个具体的服饰类也有了show方法,当使用某个具体的服饰去装饰对象时,就可以使用该服饰的show方法展示了。

3,尽管抽象的服饰类继承了Person类,但是它里面还有一个Person类的属性,这个属性就是用来给各个具体的服饰类去指明它要装饰哪个对象。由于该属性是Person类型的,因此A类服饰可以装饰B类服饰,B类服饰可以装饰C类服饰,……最终N类服饰装了Person对象(反过来看)。

4,由于每个具体的服饰都从父类那里继承了show方法,因此在show方法里,每个具体的服饰都有一个带有个人特性的装饰,然后再调用父类的装饰(即所谓的一层一层包装起来)。

分类: Design Pattern
本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/4982471.html,如需转载请自行联系原作者

大话设计模式之装饰者模式相关推荐

  1. 【张六儿大话设计模式】——装饰器模式

    大话设计模式断了好久,正好最近在研究无埋点技术接触到了ASM操作字节码,也就随之接触到了装饰器模式,于是仔细的学习了一下. 张六儿是一个网瘾少年,最喜欢玩的游戏就是Dota2了,众所周知Dota2是一 ...

  2. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

  3. 前端也要学系列:设计模式之装饰者模式

    什么是装饰者模式 今天我们来讲另外一个非常实用的设计模式:装饰者模式.这个名字听上去有些莫名其妙,不着急,我们先来记住它的一个别名:包装器模式. 我们记着这两个名字来开始今天的文章. 首先还是上< ...

  4. 设计模式 之 装饰者模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 装饰者模式 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对 ...

  5. 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )

    文章目录 I . 装饰者模式概念 II . 装饰者模式适用场景 III . 装饰者模式优缺点 IV . 装饰者模式与继承对比 V . 装饰者模式相关设计模式 VI . 装饰者模式四个相关类 VII . ...

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

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

  7. 【设计模式】装饰器模式的使用

    问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...

  8. C#设计模式(9)——装饰者模式(Decorator Pattern)

    一.引言 在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类).A ...

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

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

最新文章

  1. Altium Designer铺铜时抠铜
  2. 学python好找工作么-学完Python好找工作吗?为什么有人学完还找不到工作?
  3. 重绘Winform窗体
  4. C++ 泛型编程 实现红黑树RBTree
  5. python标准库模块_Python标准库模块之heapq
  6. [剑指offer]面试题第[59-1]题[Leetcode][第239题][JAVA][滑动窗口的最大值][单调队列][优先队列]
  7. Android APK反编译步骤
  8. 从狗屁不通文章生成器,到机器写作之路
  9. 系分 02 软件工程
  10. DWG中注记平移问题
  11. 【论文解读】持续学习三种情形
  12. Python:数据导出到Excel(使用xlwt)
  13. mySql中Truncate的用法
  14. MATLAB用imshow画图时更改和显示坐标轴
  15. 举个栗子!Tableau 技巧(90):让你的图表背景变透明
  16. CVE-2018-8961复现
  17. 观视界Grandvision EDI项目案例
  18. 金闪PDF编辑器:Windows端最好用的免费PDF编辑器上线了
  19. 【IoT】如何使用软件加密(文件夹加密工具.exe),并破解工具
  20. 2021计算机(科技软件电子信息技术)考研报告总结

热门文章

  1. 从XKCD网站下载自动所有漫画图片---python实现
  2. numpy 利用np.std() 计算出现 inf
  3. python动态运行py代码_Python 动态执行
  4. c语言编程无法生成dat文件格式,c++ - 无法从.dat文件读取数据(从Simulink创建的VS2012 C ++项目) - 堆栈内存溢出...
  5. TCP协议无边界的问题
  6. 神经网络画图-ConvNetDraw(简单实用)
  7. ENVI标准库下光谱分析
  8. mysql mangodb哪个简单,mysql和mongodb学哪个更加容易
  9. 正在将错误信息上传至服务器,android - 将Base64编码的图像上传到服务器-400服务器错误 - 堆栈内存溢出...
  10. 零基础入门语义分割——Task1 赛题理解