http://baijiahao.baidu.com/s?id=1583400270221855830&wfr=spider&for=pc

装饰器模式

前言

假设有这么一种情景,有两个程序员,一个Java、一个Python,都只负责一件事:编程。突然有一天,领导要求,在编程之前要做设计,在编程之后要进行测试。

大家最先想到的,肯定就是要求这两个程序员各自在"编程"这个方法前后加上"设计"、"测试"的功能。但是在编程中违反了"开闭原则",程序员原来的"编程"这个方法运行的很好,不要动他(修改关闭),但是你可以另找人来实现新的功能(扩展开放)。我们用代码实现一下。

实现

程序员接口:

接口

实现类:

实现类1

实现类2

如果我们需要设计和测试功能,首先想到的就是在这两个类里面加代码,这样就违反了开闭原则。我们用装饰器模式来实现。

装饰器静态类:

静态类

子类:

装饰器1

装饰器2

测试结果:

测试

扩展

看到这,一定会有人说,装饰器模式和代理模式、适配器模式、模板方法模式看起来好像啊,有什么区别么?

装饰器:原来的方法(编码)已经不能满足新需求了,需要对其进行扩展(设计、测试),理论上我们可以对原方法无限地装饰下去,比如我们可以在"设计"之前再加个"需求分析",在"测试"之后再加个"部署实施"等等。也可以去掉某些装饰器。

适配器:原来的接口已经不兼容了,适配器在原对象和目标对象中间,通过对原对象兼容的那个接口,通过转换,调用目标对象那个不兼容的接口。举个不恰当的例子,一个英国人去买饭,听不懂中国服务员说什么(接口不兼容),这时候来了一个翻译(适配器),他能与英国人交流(接口适配成功),然后翻译不干活,而是通过中国服务员的活动,将结果再返回给英国人。

代理:你们要实现什么功能我不管,我只负责调用该调用的方法。有点类似前台MM,你们干什么我不管,你就告诉我你找谁,我给你找去。

模板方法:如果说装饰器是在原有的方法上扩展很多方法,那么模板方法模式就是将原来很多固定的方法抽出到父类里。一个是加法,一个是减法

Spring设计模式之装饰器模式相关推荐

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

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

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

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

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

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

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

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

  5. python 设计模式之装饰器模式 Decorator Pattern

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

  6. 零基础学习设计模式之装饰器模式(配套视频)

    零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...

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

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

  8. javascript设计模式之装饰器模式(结构型模式)

    javascript设计模式之装饰器模式 js的设计模式分为创建型模式,结构型模式和行为模式 结构模式描述了如何组合对象以提供新的功能. 装饰器模式是一种常见的结构型模式,我们可以以一个基础对象为基础 ...

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

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

  10. 【设计模式】--- 装饰器模式、静态代理模式和动态代理模式

    文章目录 1 引子 2 业务场景介绍 3 静态代理模式 4 装饰器模式 5 动态代理模式 5.1 Proxy --- 具体的代理对象生成组件 5.2 InvocationHandler --- 封装被 ...

最新文章

  1. swust oj 962
  2. 增大apache 2的最大连接数
  3. WINCE5.0+2443 camera中断不能进来的原因
  4. source insight 4.0 括号尾部提醒 及 常用快捷键
  5. python删除字符串中的字母_在Python中删除字符串中的大写字母
  6. Nodejs前端服务器压缩图片
  7. 计算机网络子网划分路由配置实验报告,完整的子网划分与路由交换实验报告 珍藏版哦...
  8. CISCO路由器连接ADSL之PPPoE配置
  9. C#中符号的作用备忘
  10. 数据结构实现时所需的成员变量、标准对外接口
  11. BN(Batch Normalization)层原理与作用
  12. fcm算法matlab实现,fcm算法matlab
  13. 北航计算机考研 跨考,北航计算机考研经验谈_跨考网
  14. ndows 内存诊断工具,windows内存诊断工具有什么作用
  15. 产品经理的职责和分类
  16. REPEATABLE-READ隔离级别 事务中无法读到其它事务提交了的最新数据
  17. 测试银行卡号必看(长度限制及卡号字符类型总结)
  18. 想写一个供教育培训机构排课和教师管理的软件
  19. 图像增强及直方图均衡化在图像去雾上的应用(附matlab代码)
  20. qq聊天记录备份与恢复

热门文章

  1. 如何使用mac自带录屏截图功能?真的超好用
  2. mac电脑更新后,如何解决mac在文件夹中无权限新建文件?
  3. 如何移除照片中不需要的东西?这三款Mac App软件不会让你失望!
  4. centos7系统忘记root密码
  5. 如何使用清理垃圾软件优化苹果电脑
  6. 发力多人在线游戏!PS5有望2020年E3展会亮相!
  7. Eureka(易瑞卡)注册中心【Zookeeper】分布式设计定理CAP
  8. 了解java虚拟机mdash;串行回收器(6)
  9. HttpServletRequest小结
  10. AE中网络分析的实现 的各个类之间的关系