软考高级:设计模式分类(创建型、结构型、行为型)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。

热门文章推荐

  • (1)《为什么很多人工作 3 年 却只有 1 年经验?》
  • (2)《一文掌握大模型提示词技巧:从战略到战术巧》
  • (3)《AI 时代,程序员的出路在何方?》
  • (4)《如何写出高质量的文章:从战略到战术》
  • (5)《我的技术学习方法论》
  • (6)《我的性能方法论》
  • (7)《AI 时代的学习方式: 和文档对话》

一、AI 解读

设计模式是在软件工程中常见的解决特定问题的模板或指南,它们被分为三大类:创建型、结构型、和行为型。下面将简单介绍这三类设计模式,并给出一些常见的例子。

创建型设计模式

创建型设计模式主要关注对象的创建过程,使系统对对象的创建过程解耦,增加系统的灵活性和可维护性。

设计模式描述
单例模式确保一个类只有一个实例,并提供一个全局访问点。
建造者模式分步骤构建一个复杂的对象,允许用户只通过指定复杂对象的类型和内容就可以构建它们。
原型模式通过复制现有的实例来创建新的实例,而不是通过新建类。
工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。
抽象工厂模式提供一个接口,用于创建相关的对象家族,而不需要明确指定具体类。

结构型设计模式

结构型设计模式关注类和对象的组合,用于形成更大的结构,以简化设计并提高代码的复用性。

设计模式描述
适配器模式允许将一个类的接口转换成客户期望的另一个接口。
桥接模式分离抽象部分和实现部分,使它们可以独立地变化。
组合模式允许将对象组合成树形结构,以表示“部分-整体”的层次结构。
装饰器模式动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。
享元模式通过共享技术来有效地支持大量细粒度的对象。
代理模式为其他对象提供一个代理,以控制对这个对象的访问。

行为型设计模式

行为型设计模式关注对象之间的通信,为对象之间的通信提供更灵活的解决方案。

设计模式描述
观察者模式当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。
状态模式允许一个对象在其内部状态改变时改变它的行为。
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
职责链模式为请求创建了一个接收者对象的链。
访问者模式允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。
迭代器模式提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。
中介者模式用一个中介对象来封装一系列的对象交互。
备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

二、AI 出题

设计模式分类选择题

题目1

单例模式属于哪一种设计模式分类?

A. 创建型设计模式
B. 结构型设计模式
C. 行为型设计模式
D. 功能型设计模式

题目2

装饰器模式的主要目的是什么?

A. 创建一系列相关或依赖对象
B. 动态地给一个对象添加一些额外的职责
C. 确保一个类只有一个实例
D. 在不改变接口的前提下,改变对象的内部状态

题目3

观察者模式主要用于以下哪种场景?

A. 当一个对象的改变需要同时改变其他对象,且不知道具体有多少对象需要改变时
B. 当需要为一系列相互依赖的对象提供一个共享的接口时
C. 当需要多个对象共享一个状态时
D. 当对象之间的关系是可变的

题目4

抽象工厂模式与工厂方法模式不同之处在于?

A. 抽象工厂模式可以创建一系列相关的对象,而工厂方法模式只创建一种对象
B. 工厂方法模式可以创建一系列相关的对象,而抽象工厂模式只创建一种对象
C. 抽象工厂模式不需要客户端代码指定产品的具体类
D. 工厂方法模式提供一个创建对象的接口,抽象工厂模式没有这个接口

题目5

以下哪种模式允许对象在内部状态改变时改变它的行为?

A. 状态模式
B. 策略模式
C. 观察者模式
D. 命令模式

题目6

享元模式的主要目的是什么?

A. 确保一个类只有一个实例
B. 提供一个创建对象的接口,允许子类决定实例化哪个类
C. 通过共享技术支持大量细粒度的对象
D. 将一个请求封装成一个对象,以使你可用不同的请求对客户进行参数化

答案与解析

题目1: 答案 A

单例模式确保一个类只有一个实例,并提供一个全局访问点,属于创建型设计模式。

题目2: 答案 B

装饰器模式主要目的是动态地给一个对象添加一些额外的职责,以增加对象的功能。

题目3: 答案 A

观察者模式用于当一个对象的改变需要同时改变其他对象,且不知道具体有多少对象需要改变的场景。

题目4: 答案 A

抽象工厂模式与工厂方法模式的不同之处在于,抽象工厂模式可以创建一系列相关的对象,而工厂方法模式只创建一种对象。

题目5: 答案 A

状态模式允许对象在其内部状态改变时改变它的行为,这与策略模式不同,后者是将算法的使用和算法的实现分离开来。

题目6: 答案 C

享元模式的主要目的是通过共享技术支持大量细粒度的对象,以减少内存占用。

三、真题

在这里插入图片描述

在这里插入图片描述

四、拓展资料

菜鸟教程 - 设计模式

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

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

相关文章

Linux之防火墙详解

华子目录 什么时防火墙分类Netfilter(数据包过滤)定义Netfilter分析内容 防火墙无法完成的任务iptables与firewalld区别iptablesiptables执行原则原则防火墙规则规则链概念分析规则链分类注意例:物业管理公司有两条规定: 规则链之…

作用域链的理解(超级详细)

文章目录 一、作用域全局作用域函数作用域块级作用域 二、词法作用域三、作用域链 一、作用域 作用域,即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合 换句话说,作用域决定了代码区块中变…

C++初学

1>思维导图 2>试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream> #include<string.h> using namespace std;int main() {string str;cout <<…

C++14之std::index_sequence和std::make_index_sequence

相关文章系列 std::apply源码分析 C之std::tuple(一) : 使用精讲(全) 目录 1.std::integer_sequence 2.std::index_sequence 3.std::make_index_sequence 4.运用 4.1.打印序列的值 4.2.编译时求值 4.3.std::tuple访问值 5.总结 1.std::integer_sequence 运行时定义一个…

Linux:进程

进程 知识铺垫冯诺依曼体系结构操作系统&#xff08;OS&#xff09; 进程概念进程的查看ps 命令获取进程 pid文件内查看进程终止进程的方式kill命令快捷键 进程的创建 forkfork 返回值问题 进程状态运行状态 &#xff1a;R休眠状态&#xff1a;S &#xff08;可中断&#xff09…

【3GPP】【核心网】【5G】5G核心网组网方案(超详细)

5G NR RRC协议总体介绍 UE入网过程包括几个子过程&#xff1a; UE分为三种状态&#xff1a;空闲态&#xff0c;连接态和非活动态。 开机入网流程 小区搜索与选择 UE开机选网&#xff0c;小区搜索并完成下行同步。 系统消息广播 UE读取广播信息&#x…

VMD + CEEMDAN 二次分解,CNN-LSTM预测模型

目录 往期精彩内容&#xff1a; 前言 1 二次分解与数据集制作 1.1 导入数据 1.2 VMD分解 1.3 样本熵 1.4 CEEMDAN分解 1.5 数据集制作 2 基于Pytorch的 CNN-LSTM 预测模型 2.1 定义CNN-LSTM预测模型 2.2 设置参数&#xff0c;训练模型 3 模型评估与可视化 3.1 结果…

学习JavaEE的日子 Day26 手撕所有集合类底层源码

Day26 1.手撕ArrayList底层源码 思路&#xff1a; 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程 public class Test01 { public static void main(String[] args) {//ArrayList<String> list new ArrayList<>();…

【Java从发入门到精通】Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候&#xff0c;需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是&#xff0c;StringBuffer 和 StringBuilder 类的对象能够被多次的修改&#xff0c;并且不产生新的未使用对象。 在使用 Stri…

在线安装MySQL5.7

在线安装MySQL 安装MySQL5.7 yum -y install mysql57-community-release-el7-10.noarch.rpm 若无可用安装包&#xff0c;执行下面这句 wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm 本地安装 yum localinstall -y mysql57-community-releas…

Head First Design Patterns - 命令模式

什么是命令模式 命令模式&#xff0c;把请求封装成对象&#xff0c;以便使用不同的请求、队列或者日志请求来参数化其他对象&#xff0c;并支持可撤回的操作。 为什么会有命令模式 假设要设置一个遥控器&#xff0c;遥控器需要控制多个设备&#xff0c;每个设备除了开关&#…

MS30517SA单通道、高速、低侧栅极驱动器

产品简述 MS30517SA 是单通道、高速、低侧栅极驱 动器器件&#xff0c;能够有效地驱动 MOSFET 和 IGBT 开 关 。 芯片的 设 计 能 够 大 大 减 少 击 穿 电 流 &#xff0c; MS30517SA 能够提供高峰值拉、灌电流脉冲&#xff0c; 同时提供了轨到轨驱动能力以及低传播…

C break 语句

C 语言中 break 语句有以下两种用法&#xff1a; 当 break 语句出现在一个循环内时&#xff0c;循环会立即终止&#xff0c;且程序流将继续执行紧接着循环的下一条语句。它可用于终止 switch 语句中的一个 case。 如果您使用的是嵌套循环&#xff08;即一个循环内嵌套另一个循…

自动驾驶---Motion Planning之构建SLT Driving Corridor

1 背景 在上篇博客《自动驾驶---Motion Planning之Speed Boundary》中,主要介绍了Apollo中Speed Boundary的一些内容,可以构造ST图得到边界信息,最后结合粗糙的速度曲线和路径曲线,即可使用优化的方法求解得到最终的轨迹信息(s,s,s,l,l,l)。 本篇博客笔者主要介绍近…

Matlab 字符串相关命令

参考 字符串命令汇总1

代码随想录算法训练营第四十一天|卡码网46. 携带研究材料(第六期模拟笔试)、416. 分割等和子集

卡码网46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; 刷题https://kamacoder.com/problempage.php?pid1046 题解&#xff1a; 一维背包 文章讲解https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-2.html…

js导出的excel文件无法打开/打开乱码,excel无法打开xxx.xlsx因为文件格式或文件扩展无效

excel无法打开xxx.xlsx因为文件格式或文件扩展无效 使用 a 标签导出这里就不细说了&#xff0c;直接说上述问题解决方案 在调用导出接口的时候加上两个参数 responseType: “blob” responseEncoding: “utf8” export function test(data) {return util({url: /test,method: …

制冷系统管道焊接气焊安全操作

气焊操作安全教育&#xff1a; 1、检查气焊用具完好牢固无损&#xff0c;不得贴粘有&#xff08;机油&#xff09;&#xff1b; 2、气瓶余压&#xff08;2KG&#xff09;停止使用&#xff1b;清除动火 10 米范围内易燃易爆物料&#xff1b; 3、库房内动火要 做好通风排气&…

数据结构——二叉树的遍历【前序、中序、后序】

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【精选】30+Redis面试题整理(2024)附答案

目录 前言Redis基础项目有用到redis吗&#xff1f;你们项目为什么用redis?redis为什么这么快&#xff1f;了解Redis的线程模型吗&#xff1f;Redis优缺点?redis如何实现持久化&#xff1f;RDB持久化过程&#xff1f;AOF持久化过程&#xff1f;AOF持久化会出现阻塞吗&#xff…