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

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

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

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,一经查实,立即删除!

相关文章

ctf re 题目 crackini

介绍 题目链接 https://ctf.bugku.com/challenges/detail/id/412.html 该题目动态生成核心的校验代码,因此动态调试比较容易。 write up 大概分析 main 函数中得到输入,给变量addr 分配内存并由 sub_1185函数写入数据。然后执行addr处指令&#xff…

【学习总结|DAY023】Java高级技术

大家好,今天我们来聊聊 Java 中的几个高级技术:单元测试、反射、注解和动态代理。这些技术在源码、框架和架构师层面发挥着重要作用,掌握它们能让我们更深入地理解 Java 的底层原理,并提升代码质量和开发效率。 单元测试&#xf…

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

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

极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【一】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

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

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

技术文档的语言表达:简洁、准确与易懂的平衡艺术

目录 1. 简洁性:去繁从简,避免冗余2. 准确性:确保技术内容的精确传递3. 易懂性:降低门槛,让读者易于理解4. 避免歧义:清晰的表述与上下文5. 适当使用图表和示意图结语 在技术文档的撰写过程中,语…

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…

Anton和Danik的棋局对决

问题描述 Anton和Danik是两位热爱下棋的朋友。他们在一系列对局中一决胜负,每局只有一个赢家,没有平局。现在,Anton想要知道他是否比Danik赢得更多。给定一系列比赛的结果,你的任务是帮助Anton确定谁赢得更多,或者他们…

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

文章目录 前言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,建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题: 当主从复制当中,主服务器发生故障,会自动切换到一台从服务器,然后把从服务器升格成主&…

OSI 网络 7 层模型

问: 请你介绍一下OSI七层网络模型物理层解决什么问题?功能原理问题 数据链路层解决什么问题功能原理 网络层解决的问题功能原理 传输层解决什么问题功能原理会话层解决什么问题功能原理: 表示层解决什么问题 应用层解决什么问题如何展示? 问: 请你介绍一下OSI七层网络模型 物…

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

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

力扣1358. 包含所有三种字符的子字符串数目

给你一个字符串 s ,它只包含三种字符 a, b 和 c 。 请你返回 a,b 和 c 都 至少 出现过一次的子字符串数目。 示例 1: 输入:s "abcabc" 输出:10 解释:包含 a,b 和 c 各至少一次的子字…

简单整理下protobuf中常用的几个工具函数

文章目录 前言使用示例定义message结构结构体赋值ByteSizeLong()GetTypeName()DebugString()ShortDebugString()CopyFrom(const MessageLite& other)Clear() Ohters总结 前言 游戏项目中使用protobuf作为双端协议通讯的方式,算是一种中规中矩的方法了&#xff…

信息收集1224

系列博客目录 文章目录 系列博客目录1.针对十张足球图片求出的特征组成的张量,它的秩是不是比十张不同物体特征组成的张量的秩低针对问题的分析:1. 数据的模式和相似性2. 特征的独立性3. 数据的多样性4. 张量分解的数学本质5. 噪声和数据分布的影响结论 …

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

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