2023-6-9-一天一种设计模式

news2024/11/27 15:49:02


🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿

💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥
💟💟喜欢的朋友可以关注一下,下次更新不迷路💟💟
😆😆😆私聊获取个人订阅号哦,欢迎订阅共同学习😆😆😆
💖💖💖💖可以加入大家庭群聊,一起学习天天有福利💖💖💖💖





🍬本文摘要

在这里插入图片描述

用一个月的时间来系统的学习一下23种设计模式,之前学了一半已有,但是没有文章总结下来,现在重新复习一下并总结成文章,这一篇是一个开篇,来大话一下设计模式,我之前学设计模式也是看的《大话设计模式》这本书,非常好。


目录

  • 🍬本文摘要
  • 😉一、如何理解设计模式
  • 🐱‍🐉二、设计模式的分类
  • 🎉三、创建型模式的目的
  • 🐱‍🚀四、结构型模式的目的
  • 🎂五、行为型模式的目的
  • 🥩六、设计模式的用于不用
  • 🍚七、如何选择使用哪种设计模式
  • 🥠八、其他设计模式
  • 🍤九、程序员的使命是什么
  • 🍳参考文献
  • 🧊文章总结



😉一、如何理解设计模式

设计模式是一种被广泛应用于软件开发的编程思想,它提供了一套通用的解决方案来解决各种常见的设计问题。在软件开发中,为了提高代码的可重用性、灵活性和可维护性,我们经常会遇到各种设计问题。这些问题可能涉及到对象之间如何协作、如何处理变化、如何管理状态等方面。

设计模式通过抽象出这些常见的问题,并提供了一套通用的解决方案,帮助我们更好地组织代码、降低耦合度、提高代码可读性和易扩展性。使用设计模式可以减少代码重复、提高代码可维护性、降低系统的复杂度以及使代码更加清晰易懂。

同时,设计模式也可以提高团队间的沟通效率,因为设计模式是一种公认的方式,可以让不同的开发者之间更容易地交流和理解。在软件行业中,设计模式已成为一种非常重要的编程思想,不仅有助于提高软件质量,也可以提高开发效率,缩短项目周期。


🐱‍🐉二、设计模式的分类

常见的设计模式一共有23种,根据目的和范围不同可以分为三类:

  1. 创建型模式(5种):用于创建对象的模式,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。

  2. 结构型模式(7种):用于处理类或对象之间的组合关系,包括适配器模式、桥接模式、装饰器模式、外观模式、享元模式、代理模式和组合模式。

  3. 行为型模式(11种):用于描述对象之间的通信方式和协作方式,包括模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式和解释器模式。

除了这些常见的设计模式之外,还有一些其他的模式,如并发模式、架构模式等。


🎉三、创建型模式的目的

创建型模式是一类软件设计模式,其主要目的是处理对象的创建过程,旨在提供一种有效的方式来创建对象,以及管理对象的创建和生命周期。创建型模式通常应用于需要灵活地管理对象的场景,从而可以减少代码重复、提高代码可维护性、降低系统复杂度等方面提供帮助。

具体而言,创建型模式的目的包括以下几个方面:

  1. 将对象的创建和使用分离:通过将对象的创建和使用分离,可以降低类之间的耦合度,从而提高系统的灵活性和可维护性。

  2. 隐藏对象创建的复杂性:有些对象的创建过程可能非常复杂,或者涉及到很多不同的类和组件。使用创建型模式可以隐藏这些实现细节,让客户端程序更加简单明了。

  3. 提供一种可扩展的创建机制:在软件开发过程中,对象的创建方式可能会随着需求的变化而频繁改变。使用创建型模式可以提供一种可扩展的创建机制,以便在不修改原有代码的情况下轻松地添加新的对象类型。

  4. 支持对象的复用:有些对象可能被多个客户端程序所共享,如果每次都重新创建对象会浪费系统资源。使用创建型模式可以支持对象的复用,从而提高系统的性能和效率。


🐱‍🚀四、结构型模式的目的

结构型模式是一类软件设计模式,其主要目的是处理类和对象之间的组合关系,旨在提供一种有效的方式来实现类和对象的组合,以及管理它们之间的关系。结构型模式通常应用于需要灵活地实现对象之间的组合关系场景,从而可以减少代码重复、提高代码可维护性、降低系统复杂度等方面提供帮助。

具体而言,结构型模式的目的包括以下几个方面:

  1. 将对象和类组合成较大的结构:通过将对象和类组合成较大的结构,可以提高系统的灵活性和可维护性,并且使程序更加易读易懂。

  2. 隐藏系统中各个部分的实现细节:有些系统由很多不同的对象和类组成,这些对象和类的实现细节可能非常复杂,使用结构型模式可以隐藏这些实现细节,让客户端程序更加简单明了。

  3. 便于对系统进行扩展:在软件开发过程中,系统的需求可能会频繁变化,使用结构型模式可以提供一种可扩展的框架,使得系统更容易进行扩展和升级。

  4. 实现对象的复用:有些对象可能被多个客户端程序所共享,如果每次都重新创建对象会浪费系统资源。使用结构型模式可以支持对象的复用,从而提高系统的性能和效率。


🎂五、行为型模式的目的

行为型模式是一类软件设计模式,其主要目的是处理对象之间的通信方式和协作方式,旨在提供一种有效的方式来实现对象之间的通信和协作,以及管理它们之间的关系。行为型模式通常应用于需要灵活地实现对象之间的通信和协作场景,从而可以减少代码重复、提高代码可维护性、降低系统复杂度等方面提供帮助。

具体而言,行为型模式的目的包括以下几个方面:

  1. 将算法和对象的职责分离开来:有些算法可能需要被多个对象所共享,使用行为型模式可以将算法从对象中分离出来,从而提高代码的可重用性和灵活性。

  2. 管理对象之间的协作方式:在软件系统中,对象之间的协作非常重要,使用行为型模式可以提供一种规范的方式来管理对象之间的协作方式,使得程序更加易读易懂。

  3. 支持程序的动态扩展:在软件开发过程中,系统的需求可能会频繁变化,使用行为型模式可以提供一种可扩展的框架,使得系统更容易进行扩展和升级。

  4. 提供一种灵活的控制机制:行为型模式提供了一种灵活的控制机制,可以让程序动态地改变对象之间的交互方式,从而让系统更加具有弹性和可扩展性。


🥩六、设计模式的用于不用

设计模式并非万能的解决方案,应该根据实际情况来考虑是否使用它们。以下是一些关于何时使用和不使用设计模式的建议:

什么时候使用设计模式?

  1. 当面临一个已知的问题,并且已经有了经过验证的解决方案,可以考虑使用相应的设计模式。

  2. 当需要处理复杂的问题时,设计模式可以帮助提供一种可重用、灵活和可扩展的解决方案。

  3. 当需要与其他程序员共同开发一项任务,并且需要一种公认的方式来组织代码时,设计模式可以提供一种标准化的解决方案。

  4. 当需要创建大规模的应用程序时,设计模式可以帮助简化代码并提高代码质量。

什么时候不使用设计模式?

  1. 当问题太简单,使用设计模式反而会增加复杂性和难度。

  2. 当团队中没有人熟悉或理解特定的设计模式,使用它们可能会导致出现错误或产生额外的成本。

  3. 当代码需要与其他系统集成时,使用设计模式可能会对性能产生负面影响。

  4. 当需要快速原型开发时,使用设计模式可能会增加开发周期。

使用设计模式需要基于具体情况进行考虑,需要评估其是否有助于解决问题并提高代码质量,同时也需要注意不要滥用设计模式,应该选择适当的模式来解决实际问题。


🍚七、如何选择使用哪种设计模式

选择使用哪种设计模式需要考虑多个因素,包括问题的性质、系统的要求和开发人员的经验等。以下是一些选择设计模式的建议:

  1. 了解不同类型的设计模式:首先,需要了解各种不同类型的设计模式,例如创建型模式、结构型模式和行为型模式。熟悉各个模式的定义、工作原理和应用场景等方面的知识,可以帮助你更好地进行选择。

  2. 确定问题的性质:在选择设计模式时,需要考虑所面临的问题的性质。例如,如果需要创建对象并确保只有一个实例,则可以考虑使用单例模式。如果需要创建对象的过程很复杂,则可以考虑使用工厂模式。

  3. 确定系统的要求:在选择设计模式时,还需要考虑系统的要求。例如,如果系统需要支持插件化架构,则可以考虑使用桥接模式或装饰器模式。如果系统需要支持动态更新,则可以考虑使用观察者模式

  4. 考虑开发人员的经验:在选择设计模式时,需要考虑开发团队的经验水平。如果团队中有较多经验丰富的开发人员,则可以考虑使用更高级别的设计模式。如果团队中的开发人员经验较少,则可以使用更简单的设计模式。

  5. 尽可能地遵循设计原则:在选择设计模式时,需要尽可能地遵循面向对象设计的原则。例如,尽可能地让类和对象之间的耦合度降低,尽可能地保持代码的易扩展性、可重用性和可维护性等。


🥠八、其他设计模式

除了23种常见的设计模式,还有其他一些设计模式:

  1. 服务定位器模式(Service Locator Pattern):通过中央注册表来管理服务的提供和访问。

  2. 数据访问对象模式(Data Access Object Pattern):将数据源抽象出来,并提供一组标准的接口来访问这些数据。

  3. 远程代理模式(Remote Proxy Pattern):在客户端和远程资源之间引入一个代理对象,以便于客户端对远程资源的访问。

  4. 空对象模式(Null Object Pattern):使用一个默认的“空对象”来替代“null”,以避免出现空指针异常等问题。

  5. 责任链模式(Chain of Responsibility Pattern):将请求沿着一个链传递,直到某个对象能够处理它。

  6. 访问者模式(Visitor Pattern):将算法与对象结构分离开来,使得算法可以独立变化。

  7. 解释器模式(Interpreter Pattern):定义一种语言,并实现该语言的解释器。

  8. 模板方法模式(Template Method Pattern):定义一个算法框架,将一些步骤延迟到子类实现。

  9. 并发模式(Concurrency Patterns):用于处理多线程和并发编程相关的问题的设计模式。


🍤九、程序员的使命是什么

程序员的使命是为人类创造价值,通过编写高质量的代码和开发先进的技术来改善人类的生活和工作环境,为社会做出积极的贡献。


🍳参考文献

🧊文章总结

提示:这里对文章进行总结:

  本文讲了关于设计模式的一些知识,希望大家学习完有所收获。






更多好文推荐

🍸2021-4月Python 机器学习——中文新闻文本标题分类
🍹2021年4月-(计算机网络)小型校园网络模拟搭建,最全最准确版
🍺2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE
🍻2022-11-28-大数据可视化,特征维度大于50
🥂2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻

上一篇
End
下一篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当在浏览器截屏过曝时,应该采取的措施

一、问题来源 屏幕打开了HDR模式后,浏览器在截图的一瞬间出现色彩错误 正常情况如下: HDR截图过曝后如下: 二、解决方法 1. 关闭屏幕HDR模式 桌面右键显示设置关闭HDR选项 2. 修改浏览器选项 地址栏输入 edge://flags(Edg…

【Spring框架】初识Spirng

目录 Spring是什么?什么是容器?什么是IoC?传统开发ioc 开发(控制反转式程序开发) DI(依赖注入) Spring是什么? Spring指的是Spring Framework(Spring框架),它是一个开源框架,有着活跃而庞大的社区&#xf…

支持无线连接的头戴式耳机,双音腔结构很好听,雷柏VH800上手

平时在PC上玩游戏,除了键鼠一类的操控设备很重要之外,耳机等音频设备也很重要,我用的是头戴式耳机,这种耳机现在有无线版本,用起来很方便,而且延迟很低,可以带来更好的声画同步效果,…

在unity中如何使用chatGPT让虚拟IP动起来

1、导入chatGpt 解决AI智能回答 请根据上一篇文章进行导入:如何使用ChatGPT在unity中进行低代码快速开发?_向视科技,让您看见未来(nbhctec)的博客-CSDN博客 2、文本也有转换工具 可导入unity 插件-RT-Voice PRO 2.…

【回眸】Python入门(五)基础语法列表和词典:Python如何消灭重复性劳动

前言 本篇博客为填坑篇,这个系列的上一篇竟然是2021年的9月30更新的,离谱,差点就到断更两周年纪念日了,后续逐渐走向填坑的每一天,继续创作,希望这个系列的专栏文章能帮助到更多有需要的人。 列表 什么是列…

C++算法:有向无环图拓扑排序(领接链表)

文章目录 前言一、邻接表二、代码1、生成图2、出度、入度计算3、拓扑排序 总结 前言 前文有向无环图实现游戏技能树中我们使用了矩阵存储图的关系,可以称之为邻接矩阵。显然,链表也是可以实现的。在图结构入门一文中,我们也提到了链表存储的…

湖南大学OS-2020(另一张)期末考试解析

【特别注意】 答案来源于wolf以及网络 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 这张卷子很老了,我不知道具体的年份,部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选…

机器学习 | 决策树 Decision Tree | 概念向

参考视频:【小萌五分钟】机器学习 | 决策树 文章目录 📚决策树是什么(根节点、叶子节点、分支、深度)📚决策树:分类树——算法思想📚分类错误率,熵,基尼指数&#x1f407…

蓝库云|实体店搭建一套巡店管理系统,能让大型连锁店立竿见影

传统巡店工作存在许多问题特别是大型连锁店,包括工作效率低、数据收集不便捷、信息共享困难等。为了解决这些问题,蓝库云认为拥有一套巡店管理系统就显得非常重要了。 巡店管理系统具备以下特点:手机电脑数据同步、实时数据采集和记录、可定…

谷粒商城学习笔记(二):简介- 谷粒商城项目微服务架构图

目录 项目前置知识一、前后端分离开发,分为 内网部署 和 外网部署。二、用户是通过使用 客户端 来完成各种的功能三、网关的作用四、Sentiel组件五、Feign组件六、OAuth2.0认证中心七、SpringSecurity组件八、关于数据存储的解决方案九、定位bug十、注册中心十一、配…

IDEA 远程 Debug 调试,你可以不需要,但是要会

文章目录 前言配置IDEA设置启动脚本改造 细节细节1:停在本地断点,关闭程序后会继续执行吗细节2:jar包代码和本地不一致会怎么样?细节3:日志打印在哪里?细节4:调试时其他人会不会卡住&#xff1f…

湖南大学OS-2022期末考试解析

【特别注意】 答案来源于不确定的光子和wolf 是两位同学在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 这张卷子比较正,个人感觉能够代表接下来几年的考试方向。如果仔细研究应该会有所收获。 【试卷与答案】 一、&…

网络安全认证CISP、CISSP对比及分析

好多网络安全行业或者打算转行该行业的人在纠结学是考取CISP认证还是CISSP认证,作为从事多年网络安全培训认证业务的专家,对这两个认证还是非常了解的,下面是这两个认证的一个对比说明,希望能够帮助到大家更好地选择到适合自己的认…

湖南大学OS-2020期末考试解析

【特别注意】 答案来源于wolf以及网络 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 这张卷子有点老了,部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选择题(15%&#xff…

基于SSM+Vue的房屋租赁网站-求租合同设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

“混合办公”已来!

不知不觉中,你已经开启“未来办公模式”了。这听起来好像有些疯狂,但事实就是如此! 试想一下,近三年,你是不是很少去办公室,但却没有耽误工作?你有多少次是在出差的途中开视频会议,…

5分钟了解Kubernetes Ingress和Gateway API

了解Kubernetes Ingress和Gateway API之间的差异,以实现有效的流量管理。原文: Kubernetes Ingress Vs Gateway API Ingress vs Gateway API 概述 Kubernetes如今被广泛应用于容器管理、微服务编排解决方案。对于如何控制微服务的入口流量,Kubernetes提供…

未来制鞋厂的智能化改造: RFID技术的应用

近年来,RFID(射频识别)的应用在生产、物流、零售等方面得到了广泛的应用。在制鞋厂中,RFID的应用也越来越受到关注。 RFID技术可以让制鞋厂实现对鞋子的全程跟踪,从原材料的采购到鞋子的成品出货,都可以实…

OpenAI 新发布GPT 最佳实践;WordPress新增 AI写作助手;国产语言模型TigerBot发布

🦉 AI新闻 🚀 WordPress新增Jetpack AI Assistant AI写作助手 摘要:Automattic公司宣布,为其WordPress新增AI写作助手–Jetpack AI Assistant。该工具可根据用户提示撰写博文、详情页、结构化列表和表格,支持多种口吻…

代码质量规范测量

圈复杂度介绍 圈复杂度(Cyclomatic complexity)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预…