设计模式的主要分类是什么?请简要介绍每个分类的特点。

大家好,我是锋哥。今天分享关于【设计模式的主要分类是什么?请简要介绍每个分类的特点。】面试题。希望对大家有帮助;

设计模式的主要分类是什么?请简要介绍每个分类的特点。

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

设计模式是软件工程中用于解决常见问题的成熟方法,它们有助于提高系统的可重用性、可维护性和灵活性。设计模式的主要分类通常可以分为三大类:创建型设计模式结构型设计模式行为型设计模式。这三类分别针对对象的创建、对象之间的结构和对象之间的交互行为进行优化。

以下是三大类设计模式的简要介绍:

1. 创建型设计模式 (Creational Patterns)

特点:创建型模式关注于对象的创建方式,它们提供了灵活的机制来实例化对象,而不需要直接使用new关键字,从而实现了更高的代码复用性和可扩展性。创建型模式可以减少类的依赖性,并控制对象的创建过程。

主要模式

  • 单例模式 (Singleton):保证某个类在系统中只有一个实例,并提供一个全局访问点来获取该实例。用于控制全局共享资源的访问。
  • 工厂方法模式 (Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。常用于需要生产多种不同类型对象的场景。
  • 抽象工厂模式 (Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。适用于需要生成多个对象族的情况。
  • 建造者模式 (Builder):使用多个简单的对象一步步构建成一个复杂的对象。常用于需要多个步骤或阶段来构造复杂对象的情况。
  • 原型模式 (Prototype):通过复制现有对象来创建新对象,而不是通过构造函数来实例化。适用于对象创建成本高,且希望通过克隆现有对象来创建新对象的场景。

2. 结构型设计模式 (Structural Patterns)

特点:结构型模式主要关注类和对象的组合及结构,旨在通过简化系统中的复杂结构来提高代码的可扩展性和灵活性。这些模式帮助将不同的组件组合成一个更大的系统,同时保持其独立性和可维护性。

主要模式

  • 适配器模式 (Adapter):将一个类的接口转化为客户端所期望的接口,使得原本接口不兼容的类能够合作。适用于希望使已有的类能适配不同接口的场景。
  • 桥接模式 (Bridge):通过将抽象部分与其实现部分分离,使它们可以独立地变化。适用于需要将抽象和实现解耦的场景。
  • 组合模式 (Composite):将对象组合成树形结构,以表示“部分-整体”的层次结构。适用于需要表示部分与整体的层次结构的场景。
  • 装饰器模式 (Decorator):动态地给一个对象添加额外的职责(功能)。常用于在不改变对象结构的情况下,扩展对象的功能。
  • 外观模式 (Facade):为一组复杂的子系统提供一个统一的接口,简化子系统的使用。适用于需要简化系统调用的复杂性时。
  • 享元模式 (Flyweight):通过共享对象来减少内存消耗。适用于大量相似对象的共享场景,如文本渲染中的字符对象。
  • 代理模式 (Proxy):为其他对象提供一种代理,以控制对该对象的访问。常用于延迟加载、访问控制、权限验证等场景。

3. 行为型设计模式 (Behavioral Patterns)

特点:行为型模式关注对象之间的交互和职责划分,旨在提高对象之间协作的灵活性,促进低耦合和高内聚。通过适当分配职责和行为,改善对象之间的通信和协调方式。

主要模式

  • 链式责任模式 (Chain of Responsibility):允许多个对象有机会处理请求,避免请求的发送者与接受者之间的耦合。每个处理者都可以选择处理请求或传递给下一个处理者。常用于事件处理、请求链传递的场景。
  • 命令模式 (Command):将请求封装成对象,从而使用户可以使用不同的请求、队列或日志请求。常用于需要将请求排队、记录请求或撤销操作的场景。
  • 解释器模式 (Interpreter):为语言的句法解释定义一个表达式的类。常用于设计编程语言解析器、正则表达式引擎等。
  • 迭代器模式 (Iterator):提供一种方法顺序访问集合对象中的元素,而不暴露集合的内部表示。常用于遍历集合类的元素,支持不同集合的统一访问。
  • 中介者模式 (Mediator):通过一个中介对象来集中控制多个对象之间的交互,避免对象之间的直接引用和复杂耦合。常用于降低对象之间的直接耦合,简化复杂的交互流程。
  • 备忘录模式 (Memento):在不暴露对象实现的情况下,保存对象的内部状态,以便在需要时恢复到先前的状态。常用于撤销操作、历史记录等场景。
  • 观察者模式 (Observer):当一个对象的状态发生改变时,所有依赖于它的对象都会自动更新。适用于需要多个对象响应一个对象状态变化的场景(如事件监听)。
  • 状态模式 (State):允许对象在其内部状态改变时改变其行为,使得对象看起来似乎修改了其类。适用于对象的行为依赖于其状态的场景。
  • 策略模式 (Strategy):定义一系列算法,将每个算法封装起来,并使它们可以互换。常用于根据不同的策略进行不同的行为选择,避免使用多个条件判断。
  • 模板方法模式 (Template Method):定义一个算法的骨架,而将具体的实现步骤延迟到子类中。常用于对算法的结构和步骤进行控制,但允许子类提供具体的实现。
  • 访问者模式 (Visitor):使得你可以在不改变对象结构的前提下定义作用于这些对象的新操作。常用于操作复杂结构中的元素,但需要针对不同元素实现不同的操作。

总结

分类主要目标主要模式
创建型模式关注如何创建对象,提供灵活的对象创建方式单例、工厂方法、抽象工厂、建造者、原型
结构型模式关注对象和类的结构,帮助建立更灵活、可扩展的系统架构适配器、桥接、组合、装饰器、外观、享元、代理
行为型模式关注对象之间的交互和职责划分,优化对象间的协作和通信链式责任、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者

这些设计模式分别在不同的场景下帮助我们优化程序结构、提高代码的可维护性和可扩展性。选择合适的设计模式能使得软件更加灵活、高效,并且易于理解和维护。

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

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

相关文章

基于微信小程序的校园访客登记系统

基于微信小程序的校园访客登记系统 功能列表 用户端功能 注册与登录 :支持用户通过手机号短信验证码注册和登录。个人资料管理 :允许用户编辑和更新个人信息及其密码。站内信消息通知:通知公告。来访预约:提交来访预约支持车牌…

重温设计模式--观察者模式

文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject&#xf…

CH32V307VCT6---工程template创建

一、硬件:沁恒官网申请的CH32V307VCT6开发板 二、开发环境:Mounriver 三、最终效果 1.PB9连接LED1,使其闪烁 2.OLED屏幕显示:软件IIC,PB10----SDA,PB11---SCL 3.工程链接:CH32V307VCT6 lo…

分布式协同 - 分布式事务_2PC 3PC解决方案

文章目录 导图Pre2PC(Two-Phase Commit)协议准备阶段提交阶段情况 1:只要有一个事务参与者反馈未就绪(no ready),事务协调者就会回滚事务情况 2:当所有事务参与者均反馈就绪(ready&a…

【软考高级】系统架构设计师复习笔记-精华版

文章目录 前言0 系统架构设计师0.1 考架构还是考系分0.2 架构核心知识0.3 架构教材变化 1 计算机操作系统1.1 cpu 组成1.2 内核的五大功能1.3 流水线技术1.4 段页式存储1.5 I/O 软件1.6 文件管理1.7 系统工程相关 2 嵌入式2.1 嵌入式技术2.2 板级支持包(BSP&#xf…

图解HTTP-HTTP报文

参考资料:图解HTTP HTTP报文 用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(CR LF作为换行符)数据行构成的文本。 请求报文及响…

Linux -- 同步与条件变量

目录 同步 条件变量 pthread_cond_t pthread_cond_init(初始化条件变量) pthread_cond_destroy(销毁条件变量) pthread_cond_wait(线程等待条件变量) 重要提醒 pthread_cond_boardcast&#xff08…

【源码编译】windows下mingw64安装以及cmake调用

最近因为安装MIRTK库,太多第三方依赖了,太折磨了,学习了使用Cmake,有些库又需要Fortran编译器,VS2022里面装了但又调用不了,也不知道为什么,最后装的mingw64,记录一下。 1、mingw64安…

6、mysql的MHA故障切换

MHA的含义 MHA:master high availability,建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题: 当主从复制当中,主服务器发生故障,会自动切换到一台从服务器,然后把从服务器升格成主&…

LeetCode:104.二叉树的最大深度

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节…

WebRTC服务质量(12)- Pacer机制(04) 向Pacer中插入数据

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…

双指针——快乐数

一.题目描述 202. 快乐数 - 力扣(LeetCode) 二.题目解析 我们要判断一个数是不是快乐数要通过它的三个性质来进行判断。这个数会一直变化,由它的各个位的平方和重新构成这个数。如果这个数在变化的过程中变成了1,那么就是快乐数…

【玩转OCR】 | 腾讯云智能结构化OCR在多场景的实际应用与体验

文章目录 引言产品简介产品功能产品优势 API调用与场景实践图像增强API调用实例发票API调用实例其他场景 结语相关链接 引言 在数字化信息处理的时代,如何高效、精准地提取和结构化各类文档数据成为了企业和政府部门的重要需求。尤其是在面对海量票据、证件、表单和…

nginx-rtmp服务器搭建

音视频服务器搭建 本文采用 nginx/1.18.0和nginx-rtmp-module模块源代码搭建RTMP流媒体服务器 流程 查看当前服务器的nginx版本下载nginx和nginx-rtmp-module源代码重新编译nginx,并进行相关配置(nginx.conf、防火墙等)客户端测试连接测试搭…

借助Aspose.html控件, 使用 Java 编程将 HTML 转换为 BMP

Aspose.HTML for .NET 不仅提供超文本标记语言 ( HTML ) 文件处理,还提供流行图像文件格式之间的转换。您可以利用丰富的渲染和转换功能将SVG文件渲染为PNG、JPG或其他广泛使用的文件格式。但是,我们将使用此C# 图像处理库以编程方式在 C# 中将 SVG 转换…

区块链期末复习1.1:密码学哈希函数

一、哈希函数应该具备的三个特性 1.输入可以为任意长度的字符串 2.产生固定大小输出(比如256位) 3.能进行有效计算。对于n位字符串,可以在O(n)的时间内计算出哈希值。 二.加密哈希函数的三个特性 1.collision-resistance(碰撞阻力&#x…

华为:数字化转型只有“起点”,没有“终点”

上个月,我收到了一位朋友的私信,他询问我是否有关于华为数字化转型的资料。幸运的是,我手头正好收藏了一些,于是我便分享给他。 然后在昨天,他又再次联系我,并感慨:“如果当初我在进行企业数字…

Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆形图实现,Kotlin(2)

Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆形图实现,Kotlin(2) import android.content.Context import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.Path import a…

中化信息与枫清科技深化合作:共探“AI+”产业新生态

随着数字化转型的浪潮席卷全球,数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践,推动打造行业交流平台,驱动产业创新共荣,2024 年 12 月 18 日 -19 日,由中国通信标准化协会主办的“20…

Matrix-Breakout 2 Morpheus

第一步 信息收集 (1)寻找靶场真实ip arp-scan -l 靶场真实 ip 为192.168.152.154 (2)探测端口及服务 nmap -p- -sV 192.168.52.135 第二步 开始渗透 (1)访问web服务 http://192.168.152.154and http://192.168.52.135:81 发现 81 端口的页面要登录 我们使用 dirb 扫描…