06Decorator(装饰)模式
技术交流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(装饰)模式相关推荐
- 面向对象建模技术之设计模式——装饰模式
本文内容可以直达下载ppt详细版本: 面向对象建模技术--17种设计模式的详细介绍-行业报告文档类资源-CSDN下载 或选择各种知识的综合大礼包: 面向对象建模技术+UML+各种模型图+统一建模语言+ ...
- 一天一模式之24 相关模式比较
原博文:https://blog.csdn.net/KongZhongNiao/article/details/80704212 相关模式 关于相关模式的辨析.比较.选择以及组合使用等. 提前说明 模 ...
- 我们的23种设计模式(一)
23种设计模式总结与分析override1 1 单例模式 1.1 饿汉式 1.2 静态方法 1.3 懒汉式 1.4 懒汉式加锁 1.5 给类加锁(错误方法) 1.6 双重检查 1.7 静态内部类方法( ...
- 第一章 系统体系结构
1.基本概述 系统设计包含:体系结构设计和程序的详细设计:体系结构简单来讲解决的是软件或系统部署的问题:程序的详细设计:应用程序功能的问题. 2.物理体系结构 物理体系 ...
- Spring类型转换源码分析
前言 本文基于 spring 4.3.13 版本 在项目中我们经常使用 spring 提供的 IOC 功能,目前主要有两种方式:xml.注解,而这两种方式的原理是不同的,xml 的注入主要依赖 Bea ...
- java.io设计模式_JAVA IO 设计模式彻底分析
无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充.它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个 ...
- 开源框架专栏-spring(2)
开源框架专栏 1.TOMCAT性能优化整理 2.JVM性能优化整理 3.MYSQL性能优化整理 4.并发编程整理(1) 5.并发编程整理(2) 6.spring(1) 7.spring(2) 文章目录 ...
- 图解设计模式 (结城浩 著)
第1部分 适应设计模式 第1章 Iterator(迭代器) 模式-一个一个遍历 (已看) 第2章 Adapter(适配器) 模式-加个"适配器"模式以便于复用 (已看) 第2部分 ...
- react 高阶组件HOC实现组件复用
目录 一 使用步骤 二 显示鼠标坐标 三 鼠标随图片移动 四 设置displayName 五 传递props 高阶组件HOC: Higher-Order Component,是一个函数,接收要包装的组 ...
最新文章
- GPT-2的大规模部署:AI Dungeon 2 如何支撑百万级用户
- 腾讯技术工程 | 腾讯数据平台部总监刘煜宏:这5大产品平台,展示了腾讯大数据的核心能力...
- window.requestAnimationFrame
- Mistakes(Updating)
- 外行看Flash的存储原理
- 【转】一个ASP.NET MVC中ajax调用WebApi返回500 Internal Server Error的调错方法。
- 关系抽取---(二)卷积神经网络
- 中文搜索引擎技术揭密-网络蜘蛛
- jsp中调用静态的java方法调用_如何在JSP/EL中调用静态方法?
- 热血江湖Java_热血江湖源码+教程
- Ubuntu搭建FTP服务器
- word毕业论文页眉设置自动添加章节标题并左右对齐
- 权力的游戏——读《原则2 :应对变化中的世界秩序》(中)
- 描写计算机教室的词语,关于描写教室的词语
- 解決Ubuntu下搜狗输入法出现无法输入中文的问题
- 解决Python打开excel异常: XLRDError: Unsupported format, or corrupt file: Expected BOF
- 国家气象局提供的天气预报接口
- AMBA总线协议的学习-AHB,ASB,APB三种总线以及AXI接口
- Ninja安装和基本使用
- K8s、Docker、CRI、OCI 之间的爱恨情仇