当前位置: 首页 > news >正文

常用的设计模式有哪些

设计模式是软件工程中用来解决常见设计问题的一些通用解决方案。常见的设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。以下是每类设计模式的具体介绍:

创建型模式

这些模式主要用于对象创建,避免程序中的硬编码,实现对象的灵活创建。

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
  2. 工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
  3. 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。
  4. 生成器模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式(Prototype Pattern):通过复制现有的实例来创建新的对象,而不是通过实例化类。

结构型模式

这些模式涉及对象的组合,确保系统结构的灵活和高效。

  1. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
  2. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  3. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
  4. 装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活。
  5. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。
  6. 享元模式(Flyweight Pattern):通过共享尽可能多的相同对象来节省内存。
  7. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

行为型模式

这些模式涉及类和对象之间的职责分配,更注重对象之间的交互。

  1. 责任链模式(Chain of Responsibility Pattern):为请求创建一个接收对象的链,避免请求发送者与接收者耦合。
  2. 命令模式(Command Pattern):将请求封装成对象,使得可以用不同的请求、队列或者日志来参数化其他对象。
  3. 解释器模式(Interpreter Pattern):为语言创建解释器,定义一个语言的文法,并建立一个解释器来解释这个语言中的句子。
  4. 迭代器模式(Iterator Pattern):提供一种方法来顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
  5. 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散。
  6. 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  7. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
  8. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
  9. 策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。
  10. 模板方法模式(Template Method Pattern):定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。
  11. 访问者模式(Visitor Pattern):为一个对象结构中的各元素提供一个新的操作,定义表示一个操作作用于某对象结构中的各元素的操作。

每种模式都有其适用的场景和优缺点,选择合适的设计模式可以提高代码的可维护性、可扩展性和复用性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • List数据的几种数据输出方式
  • Qt中 .pro、.pri、.prf、.prl文件简解
  • LG 选择 Flutter 来增强其智能电视操作系统 webOS
  • winform 去掉Chart左侧空白
  • 智慧水利:迈向水资源管理的新时代,结合物联网、云计算等先进技术,阐述智慧水利解决方案在提升水灾害防控能力、优化水资源配置中的关键作用
  • 电脑显示mfc140u.dll丢失的修复方法,总结7种有效的方法
  • WHAT - Tailwind CSS 的灵活布局(Flex Grid)
  • live555 rtsp服务器实战之doGetNextFrame
  • 生成式 AI 的发展方向,是 Chat 还是 Agent?
  • CSS基础学习之元素定位(6)
  • CentOS软件安装与vim使用操作
  • 嵌入式linux相机 转换模块
  • opencv—常用函数学习_“干货“_5
  • 解决 Yarn 运行时的 Node.js 版本问题:一个详尽的指南
  • Font Awesome 图表图标
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • CSS实用技巧
  • es6--symbol
  • Git的一些常用操作
  • JavaScript新鲜事·第5期
  • PaddlePaddle-GitHub的正确打开姿势
  • SSH 免密登录
  • 闭包--闭包之tab栏切换(四)
  • 如何编写一个可升级的智能合约
  • 如何进阶一名有竞争力的程序员?
  • 使用Swoole加速Laravel(正式环境中)
  • 算法系列——算法入门之递归分而治之思想的实现
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 学习HTTP相关知识笔记
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • # 计算机视觉入门
  • #QT(TCP网络编程-服务端)
  • (19)夹钳(用于送货)
  • (2020)Java后端开发----(面试题和笔试题)
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (9)目标检测_SSD的原理
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (第二周)效能测试
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四)JPA - JQPL 实现增删改查
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (译)2019年前端性能优化清单 — 下篇
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 解决重复提交问题
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 托管代码与非托管代码
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /etc/skel 目录作用
  • @Autowired和@Resource的区别
  • @RestController注解的使用