设计模式很重要的

简介: 基础

请对你所熟悉的一个设计模式进行介绍

分析:建议挑选有一定技术难度,并且在实际开发中应用较多的设计模式。可以挑选装饰模式和动态代理模式。此处挑选动态代理设计模式。

讲解思路:生活案例引入、技术讲解、优缺点分析、典型应用。

1、生活案例引入:送生日蛋糕:

MM们要过生日了,怎么也得表示下吧。最起码先送个蛋糕。蛋糕多种多样了。巧克力,冰淇淋,奶油等等。这都是基本的了,再加点额外的装饰,如蛋糕里放点花、放贺卡、放点干果吃着更香等等。

分析:

方案1:如果采用继承会造成大量的蛋糕子类

方案2:蛋糕作为主体,花,贺卡,果仁等是装饰者,需要时加到蛋糕上。要啥我就加啥。

技术讲解

装饰模式(别名Wrapper)是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它通过创建一个包装对象,也就是装饰来包裹真实对象,提供了比继承更具弹性的代替方案。

装饰模式一般涉及到的角色

抽象构建角色(Component):给出一个抽象的接口,以规范准备接受附加责任的对象。

具体的构建角色(ConcreteComponent):定义一个将要接受附加责任的类。

抽象的装饰角色 (Decorator):持有一个抽象构建(Component)角色的引用,并定义一个与抽象构件一致的接口。

具体的装饰角色(ConcreteDecorator):负责给构建对象“贴上”附加的责任。

3、优缺点分析

优点

1)Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorato更多的灵活性。

2)把类中的装饰功能从类中搬移出去,这样可以简化原有的类。有效地把类的核心功能和装饰功能区分开了。

3)通过使用不同的具体装饰类以及这些装饰类的排列组合,可创造出很多不同行为的组合。

缺点

这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。

装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。

符合的设计原则:

多用组合,少用继承。利用继承设计子类的行为是在编译时静态决定的,且所有的子类都会继承到相同的行为。如能够利用组合扩展对象的行为,就可在运行时动态进行扩展。

类应设计的对扩展开放,对修改关闭。

4、典型应用

java IO中需要完成对不同输入输出源的操作,如果单纯的使用继承这一方式,无疑需要很多的类。比如说,我们操作文件需要一个类,实现文件的字节读取需要一个类,实现文件的字符读取又需要一个类....一次类推每个特定的操作都需要一个特定的类。这无疑会导致大量的IO继承类的出现。显然对于编程是很不利的。而是用装饰模式则可以很好的解决这一问题,在装饰模式中:节点流(如FileInputStream)直接与输入源交互,之后通过过滤流(FilterInputStream)进行装饰,这样获得的io对象便具有某几个的功能,很好的拓展了IO的功能。

相关文章
|
JavaScript
懒加载图片案例
懒加载图片案例
|
JavaScript 前端开发 算法
在性能上,React和Vue有什么区别
【10月更文挑战第23天】在性能上,React和Vue有什么区别
210 1
|
Linux 编译器 Go
cgo--在Go中链接外部C库
cgo--在Go中链接外部C库
go语言中的continue 语句
go语言中的continue 语句
297 3
|
SQL 流计算 API
实时计算 Flink版产品使用合集之ClickHouse-JDBC 写入数据时,发现写入的目标表名称与 PreparedStatement 中 SQL 的表名不一致如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
259 0
|
自然语言处理 前端开发 API
🤗Hugging Face Transformers Agent
本文我们探索了🤗Hugging Face Transformers Agents 的功能,并将其与🦜🔗LangChain Agents 进行了比较。
974 0
🤗Hugging Face Transformers Agent
|
Java
Java程序设计的基本结构 - 选择结构
Java程序设计的基本结构 - 选择结构
251 0
|
定位技术 开发者
百度地图基本使用及画线路轨迹播放问题
百度地图基本使用及画线路轨迹播放问题
|
人工智能 IDE Java
学习java的十大理由
在之前的整理的学习java知道这五个网站就够了,有很多网友留言问到,为什么学习java,学习其他语言不是更好吗?今天我们来讲一下,学习java的10大理由. Java是当今最流行的编程语言之一。根据2021 年 11 月的 TIOBE 指数,它是第三大最受欢迎的编程语言,好长时间都是排在第一位,近几年是因为人工智能的崛起,python才勉强排在第一位。
265 0
|
Java API 开发工具
Unity零基础到入门 ☀️| 基础知识入门篇章,看完就可以做游戏啦! | 寻找C站宝藏
❤️寻找C站宝藏-Unity 📢前言 🧡Unity零基础到入门(一) ☀️| 一起走进游戏引擎界大佬——Unity 的陈情往事(^_−)☆ 💛Unity零基础到入门(二) ☀️| Unity下载安装---使用UnityHub下载各个版本的Unity(收藏) 💚Unity零基础到入门(三) ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆ 💙Unity零基础到入门(四) ☀️| 学会这些Unity实用知识点,我也可以做小游戏啦!(^_−)☆ 💜Unity零基础到入门(五) ☀️| 学会这些Unity常用组件,我离开发⭐️3A游戏大作⭐️又近了一步!(^_−)☆
Unity零基础到入门 ☀️| 基础知识入门篇章,看完就可以做游戏啦! | 寻找C站宝藏