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

server/2024/12/28 2:28:57/

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

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

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.ppmy.cn/server/152974.html

相关文章

Eureka服务注册源码

spring-cloud-starter-netflix-eureka-client 版本是3.0.3 核心装备类: EurekaClientAutoConfiguration EurekaDiscoveryClientConfiguration 核心类,以及引用的关系如下 EurekaRegistration - EurekaInstanceConfigBean 实例配置bean- ApplicationInfo…

Apache Jmeter Liunx环境部署与接口压测

Jmeter有什么作用 JMeter是一种开源工具,主要用于测试软件应用程序的性能。它是Apache软件基金会的一部分,主要针对负载和性能测试。通过模拟多用户并发访问,以测试应用程序在极限状态下的稳定性和错误处理能力。 安装前准备 Java Development Kit (JDK),一般为jdk8及以上…

告别卡顿:CasaOS轻NAS设备安装Gopeed打造高效下载环境

文章目录 前言1. 更新应用中心2.Gopeed安装与配置3. 本地下载测试4. 安装内网穿透工具5. 配置公网地址6. 配置固定公网地址 前言 无论你是需要大量文件传输的专业人士,还是只是想快速下载电影或音乐的普通用户,都会使用到下载工具。如果你对现有的下载工…

20241230 基础数学-线性代数-(1)求解特征值(numpy, scipy)

所有代码实现,基于教程中的理论通过python实现出来的。效率不高,但有代码可以看。 由于scipy/sckitlearn/sparkx 底层的实现都被封装了(小白兔水平有限,fortran代码实在没看懂)这里的实现至少可以和理论公式对应的上。…

cursor保存更改操作技巧

1. 当我们在agent模式时,要求cursor更改代码时,cursor回答后,就已经更改了代码了,这时候就可以对程序进行编译和测试, 不一定先要点” accept“, 先测试如果没有问题再点“accept”,这样composer就会多一条…

EMQX构建简易的云服务

基本思路: 使用EMQX作为Mqtt brokermqtt-receive-server服务,用于接收设备上报的数据mqtt-sender-service服务,用于下发数据给设备KafKa实现数据解耦,mqtt-receive-server服务接收的数据简单处理下直接扔到Kafka中云服务各业务系…

【Apache Doris】周FAQ集锦:第 26 期

SQL问题 Q1 doris 3.0存算分离模式下,建表的时是否需要指定表的副本数 不需要,指定了也会忽略;存算分离模式下,数据副本由远端存储去管控。 Q2 doris 通过dbeaver查询时报错:[SXXXX]… doris的错误码通常都是EXXXX&…

Nacos的下载和启动(如何快速稳定下载在github中)

目录 Nacos的下载 下载加速器 在githup中找到Nacos 启动Nacos 访问Nacos Nacos的下载 下载加速器 首先,我们需要进入githup中,我们直接访问,肯定是访问不到的。 这里我们经常玩游戏的同学肯定知道steam,这个加速器。直接进入…