设计模式概述

简介: 设计模式是软件工程中的最佳实践,帮助开发者解决常见问题,提高代码的可重用性、可读性和可靠性。学习设计模式可以提升思维能力、标准化程序设计、增强代码质量。文章介绍了设计模式的分类(创建型、结构型、行为型)及其在流行框架中的应用,建议读者掌握SOLID原则并深入学习GoF的23种设计模式。

设计模式概述

设计模式是软件工程中的一种最佳实践,它描述了软件设计过程中一些常见问题的解决方案。这些模式是经过验证的、可重用的设计方案,可以帮助开发者解决特定的问题,提高代码的可重用性、可读性和可靠性。

在学习设计模式之前,建议至少要学会自己画UML图中的类图,这在之后的文章中我会做详细讲解。

为什么要学习设计模式

  1. 提高思维能力:设计模式是对面向对象设计原则的实际运用,有助于提高程序员的思维能力、编程能力和设计能力。
  2. 标准化程序设计:使程序设计更加标准化,代码编制更加工程化,提高软件开发效率,缩短开发周期。
  3. 增强代码质量:设计的代码具有高可重用性、强可读性、高可靠性、良好灵活性和易维护性。

如何学习设计模式

  1. 理解基本原则:掌握SOLID原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)。
  2. 学习经典模式:深入学习GoF(Gang of Four)的23种设计模式,理解每种模式的适用场景和实现方式。
  3. 实践应用:通过实际项目应用设计模式,加深理解并掌握其精髓。
  4. 阅读源码:分析流行框架的源码,了解设计模式在实际开发中的应用。

流行框架中的设计模式应用

设计模式 应用实例
单例模式 在Spring框架中,Bean的默认作用域是单例,确保每个Bean只有一个实例。
工厂模式 在Java集合框架中,ArrayList、LinkedList等都是通过工厂方法创建的。
装饰器模式 在Java I/O库中,通过装饰器模式动态地给流添加功能,如BufferedReader装饰InputStream。
观察者模式 在GUI编程中,事件监听和处理机制通常使用观察者模式实现。
适配器模式 在Java中,java.util.Arraysjava.util.List之间的适配器。
桥接模式 在GUI框架中,如Swing,将界面与功能分离,使得两者可以独立变化。
组合模式 在文件系统中,文件和文件夹的层次结构使用组合模式实现。
策略模式 在排序算法中,不同的排序策略(如快速排序、归并排序)可以通过策略模式动态切换。
模板方法模式 在框架中,定义算法骨架,让子类实现具体步骤,如JUnit中的测试框架。
命令模式 在GUI中,按钮点击事件的处理可以通过命令模式实现。
备忘录模式 在文本编辑器中,保存和恢复文档状态的功能可以通过备忘录模式实现。
状态模式 在工作流管理系统中,任务的不同状态(如待审核、审核中、已完成)可以通过状态模式管理。
访问者模式 在编译器中,对不同的语法结构进行操作(如计算、优化)可以通过访问者模式实现。
中介者模式 在网络应用程序中,组件之间的交互可以通过中介者模式进行解耦。
解释器模式 在解析表达式或命令时,如计算器程序,可以使用解释器模式。
迭代器模式 在集合框架中,遍历元素时使用迭代器模式,如java.util.Iterator
责任链模式 在Web框架中,请求的处理可以通过责任链模式传递给不同的处理器。
享元模式 在数据库连接池中,通过享元模式减少对象的创建和销毁,提高性能。

设计模式的分类

设计模式可以分为三大类:创建型、结构型和行为型。

创建型模式

  • 单例模式:确保一个类只有一个实例,并提供一个全局访问点。
  • 原型模式:通过复制现有的实例创建新的实例。
  • 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
  • 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口。
  • 建造者模式:构建一个复杂的对象,允许按步骤构造。

结构型模式

  • 适配器模式:将一个类的接口转换成客户希望的另一个接口。
  • 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。
  • 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 装饰模式:动态地给一个对象添加额外的职责。
  • 外观模式:为子系统中的一组接口提供一个一致的界面。
  • 享元模式:通过共享来高效地支持大量细粒度的对象。
  • 代理模式:提供一个与真实对象相同的接口的代理对象来控制对真实对象的访问。

行为型模式

  • 策略模式:定义一系列算法,把它们一个个封装起来,并使它们可互换。
  • 模板方法模式:在方法中定义一个算法的框架,而将一些步骤延迟到子类中实现。
  • 观察者模式:对象间的一种一对多的依赖关系。
  • 迭代器模式:顺序访问一个聚合对象中的各个元素,不暴露其内部的表示。
  • 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
  • 命令模式:将请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。
  • 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 状态模式:允许一个对象在其内部状态发生改变时改变其行为。
  • 访问者模式:为一个对象结构(如组合结构)增加新能力。
  • 解释器模式:为某个语言定义了它的语法(或表达式)的表示,并定义了一个解释器来解释这个语法
  • 中介者模式:通过引入一个中介者对象来封装一组对象之间的交互

概括


目录
相关文章
|
5天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
7天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
7903 19
|
11天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
4306 10
资料合集|Flink Forward Asia 2024 上海站
|
19天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
11天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
7天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
104579 10
|
7天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
618 39
|
4天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
626 243
|
1天前
|
弹性计算 运维 监控
云服务测评 | 基于云服务诊断全方位监管云产品
本文介绍了阿里云的云服务诊断功能,包括健康状态和诊断两大核心功能。作者通过个人账号体验了该服务,指出其在监控云资源状态和快速排查异常方面的优势,同时也提出了一些改进建议,如增加告警配置入口和扩大诊断范围等。