技术交流QQ群:1027579432,欢迎你的加入!

1.单一职责模式

  • 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀。同时充斥着重复代码,这时候的关键是划清责任。

2.单一职责模式的典型代表

  • Decorator(装饰)模式
  • Bridge(桥)模式

3.Decorator(装饰)模式的动机

  • 在某些情况下,我们可能会过度地使用继承来扩展对象的功能,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性,并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。
  • 如何使对象功能的扩展能够根据需要来动态地实现?同时避免扩展功能的增多带来的子类膨胀问题?从而使得任何功能扩展变化所导致的影响降为最低?

4.Decorator(装饰)模式的定义

  • 动态(组合)地给一个对象增加一些额外的职责,就增加功能而言, Decorator(装饰)模式比生成子类(继承)更为灵活(消除重复代码和减少子类个数)。


5.Decorator(装饰)模式总结

  • 通过采用组合而非继承的手法,Decorator(装饰)模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的灵活性差多个子类衍生问题。
  • Decorator类在接口上表现为is-a Component的继承关系,即Decorator类继承了Component类所具有的接口。但在实现上又表现为has-a Component的组合关系,即Decorator类又使用了另外的一个Component类。
  • Decorator(装饰)模式的目的并非解决多子类衍生的多继承问题,Decorator(装饰)模式应用的要点在于解决主体类在多个方向上的扩展功能——是为了装饰的含义。

6.资料下载

  • 笔记,欢迎star,follow,fork…

06Decorator(装饰)模式相关推荐

  1. 面向对象建模技术之设计模式——装饰​​​​​​​模式

    本文内容可以直达下载ppt详细版本: 面向对象建模技术--17种设计模式的详细介绍-行业报告文档类资源-CSDN下载 或选择各种知识的综合大礼包: 面向对象建模技术+UML+各种模型图+统一建模语言+ ...

  2. 一天一模式之24 相关模式比较

    原博文:https://blog.csdn.net/KongZhongNiao/article/details/80704212 相关模式 关于相关模式的辨析.比较.选择以及组合使用等. 提前说明 模 ...

  3. 我们的23种设计模式(一)

    23种设计模式总结与分析override1 1 单例模式 1.1 饿汉式 1.2 静态方法 1.3 懒汉式 1.4 懒汉式加锁 1.5 给类加锁(错误方法) 1.6 双重检查 1.7 静态内部类方法( ...

  4. 第一章 系统体系结构

    1.基本概述         系统设计包含:体系结构设计和程序的详细设计:体系结构简单来讲解决的是软件或系统部署的问题:程序的详细设计:应用程序功能的问题. 2.物理体系结构         物理体系 ...

  5. Spring类型转换源码分析

    前言 本文基于 spring 4.3.13 版本 在项目中我们经常使用 spring 提供的 IOC 功能,目前主要有两种方式:xml.注解,而这两种方式的原理是不同的,xml 的注入主要依赖 Bea ...

  6. java.io设计模式_JAVA IO 设计模式彻底分析

    无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充.它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个 ...

  7. 开源框架专栏-spring(2)

    开源框架专栏 1.TOMCAT性能优化整理 2.JVM性能优化整理 3.MYSQL性能优化整理 4.并发编程整理(1) 5.并发编程整理(2) 6.spring(1) 7.spring(2) 文章目录 ...

  8. 图解设计模式 (结城浩 著)

    第1部分 适应设计模式 第1章 Iterator(迭代器) 模式-一个一个遍历 (已看) 第2章 Adapter(适配器) 模式-加个"适配器"模式以便于复用 (已看) 第2部分 ...

  9. react 高阶组件HOC实现组件复用

    目录 一 使用步骤 二 显示鼠标坐标 三 鼠标随图片移动 四 设置displayName 五 传递props 高阶组件HOC: Higher-Order Component,是一个函数,接收要包装的组 ...

最新文章

  1. GPT-2的大规模部署:AI Dungeon 2 如何支撑百万级用户
  2. 腾讯技术工程 | 腾讯数据平台部总监刘煜宏:这5大产品平台,展示了腾讯大数据的核心能力...
  3. window.requestAnimationFrame
  4. Mistakes(Updating)
  5. 外行看Flash的存储原理
  6. 【转】一个ASP.NET MVC中ajax调用WebApi返回500 Internal Server Error的调错方法。
  7. 关系抽取---(二)卷积神经网络
  8. 中文搜索引擎技术揭密-网络蜘蛛
  9. jsp中调用静态的java方法调用_如何在JSP/EL中调用静态方法?
  10. 热血江湖Java_热血江湖源码+教程
  11. Ubuntu搭建FTP服务器
  12. word毕业论文页眉设置自动添加章节标题并左右对齐
  13. 权力的游戏——读《原则2 :应对变化中的世界秩序》(中)
  14. 描写计算机教室的词语,关于描写教室的词语
  15. 解決Ubuntu下搜狗输入法出现无法输入中文的问题
  16. 解决Python打开excel异常: XLRDError: Unsupported format, or corrupt file: Expected BOF
  17. 国家气象局提供的天气预报接口
  18. AMBA总线协议的学习-AHB,ASB,APB三种总线以及AXI接口
  19. Ninja安装和基本使用
  20. K8s、Docker、CRI、OCI 之间的爱恨情仇

热门文章

  1. easyui中的tree数据使用说明
  2. FF小股东美国起诉恒大 要求收回中国公司控制权
  3. LoadRunner 常见错误收集及解决方案
  4. MySQL排错工具perror
  5. 利用python实现Windows8定时自动关机和休眠
  6. 敏捷(Agile)与精益(Lean)对比
  7. 用了 10 年 Windows 后,我最终转向 Linux
  8. 超长JVM总结,面试必备
  9. 2次转管理失败后,我对项目、团队、敏捷转型的新认知
  10. Keep裁员、程序员被抓,看了下行情,我选择投奔AI