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

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

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

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):使得你可以在不改变对象结构的前提下定义作用于这些对象的新操作。常用于操作复杂结构中的元素,但需要针对不同元素实现不同的操作。

总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

V-Ray 来到 Blender:为艺术家提供专业级渲染

Chaos 正式宣布将其行业领先的渲染引擎 V-Ray 集成到 Blender 中。这一备受期待的开发为 Blender 用户带来了专业级渲染功能,使他们能够直接在他们最喜欢的 3D 平台中制作令人惊叹的、逼真的图像和动画。 渲染 强大的可缩放渲染 使用 V-Ray 将您的渲染提升到一个…

三层交换原理及图示

大概 三层交换原理 需要提前掌握的(VLAN基础知识) 【Info-Finder 参考链接:什么是VLAN】 三层是IP层,即网络层。为了方便记忆的:“先有网络,才有传输”、“传输是为了验证有网络”、“IP不是Transfer”…

讯飞星火智能生成PPTAPi接口说明文档 python示例demo

接口调用流程图 常见问题:1、新版和旧版相比有什么变化? 新版提供了100主题模板,并且联网搜索、ai配图等功能2、新版的模板全部免费吗? 新版的100主题模板全部免费使用,不再额外扣量3、新版和旧版的接口可以混用吗&am…

win系统B站播放8k视频启用HEVC编码

下载HEVC插件 点击 HEVC Video Extension 2.2.20.0 latest downloads,根据教程下载安装 安装 Random User-Agent 点击 Random User-Agent 安装 配置 Random User-Agent ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dda0ea75096c42c0a79ef6f6f5521…

JVM调优实践篇

理论篇 1多功能养鱼塘-JVM内存 大鱼塘O(可分配内存): JVM可以调度使用的总的内存数,这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…

OSI 七层模型 | TCP/IP 四层模型

注:本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型(七层模型) BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型,亦称 OSI(Open System Interconnection&#xf…

Microsoft 365 Copilot模型多元化,降低对OpenAI依赖并降低成本

最近微软的新闻比较多,其中最令人瞩目的一条是,GitHub的copilot免费开放了,虽然次数较少(代码补全每月2000次,chat对话每月50次),但至少是一个标志性事件,并且模型也由原来的单一的G…

国内用户怎么注册PayPal账户?

国内怎么用paypal?虽然国内用户注册PayPal账户相对简单,但由于PayPal在中国的服务保障有限,注册过程中可能会遇到地区限制或账户关联的问题。使用 OKBrow指纹浏览器 可以有效解决这些问题,避免因地域、IP和指纹信息相似而导致的账…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

攻防世界web第三题file_include

<?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?>这是题目 惯例&#xff1a; 代码审查&#xff1a; 1.可以看到include(“./check.php”);猜测是同级目录下有一个ch…

矢量网络分析仪(VNA)基础解析与应用指南

矢量网络分析仪&#xff08;VNA&#xff09;是一种极其精密的仪器&#xff0c;能够对电气网络的阻抗进行表征&#xff0c;测量结果可提供幅度和相位细节&#xff0c;从而深入了解其行为。被测设备&#xff08;DUT&#xff09;通常用于射频&#xff08;RF&#xff09;应用&#…

力扣刷题:单链表OJ篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.反转链表&#xff08;1&#xff09;题目描述…

三维激光扫描及逆向工程-构建复杂工业产品模型

关于三维激光扫描&#xff1a; 三维扫描技术是一种先进的高精度立体扫描技术&#xff0c;通过测量空间物体表面点的三维坐标值&#xff0c;得到物体表面的点云信息&#xff0c;并转化为计算机可以直接处理的三维模型&#xff0c;又称为“实景复制技术” 。 三维激光技术能够快…

速度更快、功能更强 | Q-Tester V4.7工程诊断仪全新升级!

Q-Tester.Expert是一大基于ODX&#xff08;ASAM MCD-2D/ISO 22901-1&#xff09;和OTX&#xff08;ISO 13209&#xff09;国际标准的工程诊断仪&#xff0c;通过此诊断仪可实现与ECU控制器之间的数据交互。基于ODX/OTX国际标准的解决方案&#xff0c;其优势在于&#xff1a;ODX…

大定活动场景全链路性能压测

压测背景 满足V23小程序大定场景下的性能 批量造10万的token数据进行压测 性能测试名词解释 术语 释义 VU 并发用户数 RT 响应时间 TPS 吞吐量的一种&#xff0c;指每秒处理的事务数&#xff0c;每个事务可以是一个接口或者多个接口 QPS 吞吐量的一种,指每秒服务器…

C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码

一、树的存储结构 1&#xff09;双亲表示法实现&#xff1a; 定义结构数组存放树的结点&#xff0c;每个结点含两个域: 数据域&#xff1a;存放结点本身信息。双亲域&#xff1a;指示本结点的双亲结点在数组中的位置。 特点&#xff1a;找双亲简单&#xff0c;找孩子难 C语…

基于Ubuntu2404桌面版制作qcow2镜像

kvm 本地安装导入现有磁盘 环境&#xff1a;Ubuntu2404桌面版&#xff0c;且开启虚拟化引擎 本次实验使用本地安装的方式用centos7.9 ISO格式镜像创建一台虚拟机&#xff0c;创建后默认的磁盘格式为qcow2&#xff0c;然后对该磁盘进行压缩&#xff0c;再次使用导入现有磁盘的方…

华为战略解码-162页 八大章节 精读

该文档主要解读了华为战略解码的过程和内容&#xff0c;强调了领导力在战略管理中的重要性&#xff0c;介绍了华为战略管理的七个关键点以及领导力的七个特质。文档详细阐述了华为在战略解码过程中如何利用BLM模型等工具&#xff0c;以及如何从市场洞察、业务设计等方面制定和执…

【2024年最新】BilibiliB站视频动态评论爬虫

废话不多说&#xff0c;直接先放git仓库&#xff1a;GitHub - linyuye/Bilibili_crawler: bilibili爬虫&#xff0c;基于selenium获取oid与cookie&#xff0c;request获取api内容 〇&#xff1a;概念简述 oid&#xff1a;视频/动态的uuid&#xff0c;b站对于发布内容的通用唯…

BAPI_BATCH_CHANGE在更新后不自动更新批次特征

1、问题介绍 在CL03中看到分类特性配置了制造日期字段&#xff0c;并绑定了生产日期字段MCH1~HSDAT MSC2N修改批次的生产日期字段时&#xff0c;自动修改了对应的批次特性 但是通过BAPI&#xff1a;BAPI_BATCH_CHANGE修改生产日期时&#xff0c;并没有更新到批次特性中 2、BAPI…