什么是设计模式?

news2025/6/19 14:27:34

文章目录

  • 01 | 概念
  • 02 | 要素
  • 03 | 分类
  • 04 | 总结

“每一个模式描述了一个在我们周围不断重复发生的问题,以及问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。
设计模式的核心:提供了相关问题的解决方案,使得人们可以更加简单方便的复用前人经验所得的成功的、有效的软件/系统设计框架。

在这里插入图片描述

01 | 概念

刚开始了解设计模式时,这个词一听就很高大上,实际在以往的生活中处处是“设计模式”。如中学时代理科套用的数学公式、如做会议纪要时用到的PPT模板、如做算法题时套用的解题思路、如软件代码重构时将重复代码封装为一个函数的操作等都是“设计模式”的一种体现。

当然不是说“设计模式”就等于数学上的数学公式,因为“设计模式”是一个模板(类比C++中的模板类),所以一个设计模式应可用于多种不同的场合,可以在类似问题的不同场景上使用,具有高复用性和高可移植性的特点。

简单来说,设计模式的概念就是 可重复使用的、高效的、易读的、有目标性的、高可移植性经验总结模板

在这里插入图片描述

02 | 要素

设计模式一般有以下四个基本要素:

  1. 模式名称(Pattern Name):是一个帮助记忆的名词,常用一两个词来描述该设计模式对应的问题、解决方案和效果等。合适的模式名称也是设计模式的一个重点,可以更好的帮助使用者对该模式的理解

  2. 问题(Problem):描述了该设计模式的应用场景,通常在本要素中对设计模式的问题所在以及所处环境进行描述,作为设计模式的一个引言,类似于 github 上工程的 readme

  3. 解决方案(Solution):描述了该设计模式的组成成分、各部分之间的关系以及各自的职责和通信合作方式。概念部分说到设计模式是一个模板,所以在解决方案上一般不会描述一个特定问题的解决方案,而是描述对于这类问题应该怎么去解决的思路

  4. 效果(Consequences):描述了该设计模式产生的效果以及过程中要注意的资源问题。效果上包括了对系统灵活性、扩展性以及可移植性的影响;资源问题上包括了应用该设计模式时在系统上产生的时间、空间的消耗

在这里插入图片描述

03 | 分类

针对不同类型的问题,同样的就有不同类型的设计模式,主要分为三大类 创建型、结构型、行为型

创建型结构型行为型
对象抽象工厂模式、生成器模式、原型模式、单例模式适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式
  • 创建型模式

    创建型设计模式抽象了实例化的过程,帮助系统独立于如何创建、整合它其中的对象以其职责。如一个类创建型模式使用继承改变实例化的类,而一个对象创建型模式将实例化委托给另一个对象,其主要的特点如下:

    1. 将系统使用的具体类的信息封装起来;

    2. 将系统中所使用类的实例是如何创建和整合隐藏起来

    所以创建型模式主要体现在对象的创建

    以单例模式为例:

    • 目的:保证一个类仅有一个实例,并提供一个可全局访问它的接口

    • 应用:单例模式主要应用场景如下

      1. 当类只有一个实例而且客户可以从一个众所周知的接口访问它时;

      2. 当这个唯一实例是可以通过子类化可扩展的,并且客户无效更改代码就能使用一个扩展的实例时;

  • 结构型模式

    结构型设计模式采用继承机制来组合系统接口,比如采用多重继承的方式将两个以上的类组合成一个大类,这个大类包含了所有父类的性质,有助于多个独立开发的类进行协同工作。所以结构型设计模式有一个类名称 —— 适配器(Adapter),它不仅可以对多个类的接口和实现进行整合,还可以对一些对象进行整合。所以结构型设计模式主要体现在处理类、对象之间的组合关系

    以适配器模式为例:

    • 目的:将一个类的接口转换称客户希望的另外一个接口,使得原本不适用的接口变成可以工作

    • 应用:适配器模式主要应用场景如下:

      1. 想使用一个已存在类的不可用的接口时;

      2. 想创建一个可以与其他不相关类协同工作的类时

  • 行为型模式

    行为型设计模式不仅描述对象或类的模式,还描述它们之间的通信模式,显现他们在运行时复杂的控制环节,将难以理解的控制流体思路转换成不同对象之间的联系思路,主要涉及算法和对象之间职责的分配

    以模板方法模式为例:是一个算法的抽象定义,它逐步定义算法的各个步骤,如每一个步骤调用哪个抽象操作等。

    • 目的:定义一个操作中的算法股价,将一些步骤放到子类中,使得子类可以不改变算法的整体结构

    • 应用:模板方法模式主要应用场景如下:

      1. 一次性实现一个算法的不变部分,将可变的行为留给子类来实现;

      2. 各个子类中公共的行为提取出来放在一个公共父类中,有效避免代码重复;

在这里插入图片描述

04 | 总结

设计模式就是对不同类型的相似问题的解决方法进行经验总结的结果。

对于软件设计模式来说,确定了所包含的类和实例之间的协作方式以及职责所在,每一个设计模式都描述了对于什么样的问题应该在什么时候使用它,在有约束条件的情况是否还有效,以及最后产生的作用和资源消耗。

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

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

相关文章

机械硬盘提示格式化的常见原因|3种数据恢复方法

机械硬盘是电脑存储设备中的一种,它的存储容量比较大,通常采用机械运动的方式记录数据。 其内部结构由多个盘片和磁头组成,盘片层层叠放在一起并通过主轴转动,磁头则通过磁臂上下移动并接触盘片表面进行读写操作。但是在日常使用电…

如何用Golang处理每分钟100万个请求

用Golang处理每分钟100万个请求 转载请注明来源:https://janrs.com/9yaq 面临的问题 在我设计一个分析系统中,我们公司的目标是能够处理来自数百万个端点的大量POST请求。web 网络处理程序将收到一个JSON文档,其中可能包含许多有效载荷的集合…

Spring Boot基础学习之(十六):用户认证和授权

本次项目使用静态资源代码免费下载 https://download.csdn.net/download/m0_52479012/87679062?spm1001.2014.3001.5501 在日常的登录网页中,是怎么分辨那些用户是具有那种权限呢? 本次博客实现的功能是:哪些网页是谁有可以访问的&#xff…

进程状态概念详解!(7千字长文详解)

进程状态概念详解 文章目录进程状态概念详解进程状态为什么会有这些状态运行总结阻塞就绪/新建挂起阻塞和挂起的区别!linux下的进程状态运行——R睡眠——S暂停——T关于号深度睡眠——D追踪暂停 ——t死亡——X僵尸——Z僵尸进程的危害总结孤儿进程——S状态进程优…

一位腾讯在职7年测试工程师的心声...

作为一个在腾讯工作7年的测试工程师,今天就来聊聊腾讯工作压力到底从何而来。 压力的开始:时间回到7年前,我人生中的第一份实习工作,是在腾讯公司做一个自动化测试工程师。当时的我可谓意气风发,想要大干一场&#xf…

SpringBoot 介绍

1.简介 SpringBoot最开始基于Spring4.0设计,是由Pivotal公司提供的框架。 SpringBoot发展史: 2003年Rod Johnson成立Interface公司,产品是SpringFramework2004年,Spring框架开源,公司改名为Spring Source2008年&…

[MAUI 项目实战] 手势控制音乐播放器(三): 动画

文章目录吸附动画确定位置平移动画回弹动画使用自定义缓动函数多重动画点击动画项目地址上一章节我们创建了手势容器控件PanContainer,它对拖拽物进行包装并响应了平移手势和点击手势。拖拽物现在虽然可以响应手势操作,但视觉效果较生硬,一个…

【ros2】ubuntu18.04同时安装ros1和ros2

序言 ubuntu18.04(已安装ros melodic)中安装ros2 dashing版本,以支持ros2工程的编译使用 1. 安装ros melodic 参考我之前的文章:docker容器中安装melodic-ros-core过程总结 2. 安装ros2 dashing (1)设置…

《花雕学AI》12:从ChatGPT的出现看人类与人工智能的互补关系与未来发展

马云说道,ChatGPT这一类技术已经对教育带来挑战,但是ChatGPT这一类技术只是AI时代的开始。 谷歌CEO桑德尔皮猜曾说:“人工智能是我们人类正在从事的最为深刻的研究方向之一,甚至要比火与电还更加深刻。” 360周鸿祎认为&#xf…

用WPF设计一个简易的休息提醒闹钟

目录一.视频演示地址二.代码展示三.源代码:最近利用工作之余,写了一个WPF程序玩玩,用来提醒自己在长时间学习后要休息一会儿哈哈,功能很简单,没啥难点一.视频演示地址 可以设定间隔提醒时长和休息时长,点击…

【C++】STL之stack、queue的使用和模拟实现+优先级队列(附仿函数)+容器适配器详解

之前的一段时间,我们共同学习了STL中一些容器,如string、vector和list等等。本章我们将步入新阶段的学习——容器适配器。本章将详解stack、queue的使用和模拟实现优先级队列(附仿函数)容器适配器等。 目录 (一&…

WMI系列--关于WMI

本系列预计有三节,分别记录关于WMI的一些基础知识,WMI的永久订阅事件,WMI常见的攻防对抗手段 WMI简介 WMI 的全称是 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之…

Document Imaging SDK 11.6 for .NET Crack

Document Imaging SDK for .NET View, Convert, Annotate, Process,Edit, Scan, OCR, Print 基本上被认为是一种导出 PDF 解决方案,能够为用户和开发人员提供完整且创新的 PDF 文档处理属性。它具有提供简单集成的能力,可用于增强用户 .NET 的文档成像程…

c语言—指针进阶

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

HC小区管理系统-海康摄像头监控配置

HC小区管理系统-海康摄像头监控配置 【HC小区管理系统-海康摄像头监控配置】 HC小区管理系统-海康摄像头监控配置_哔哩哔哩_bilibili 监控配置说明&#xff1a; 一、安装HC物业系统 HC小区管理系统安装本地代码发布 二、安装物联网系统 三、安装srs 流媒体服务器 四、启动s…

MobTech MobLink|裂变拓新,助力运营

一、打破移动应用孤岛 在移动互联网时代&#xff0c;应用的数量和质量都在不断上升&#xff0c;用户的需求和体验也越来越高。然而&#xff0c;应用之间的跳转和互通却存在很多障碍和不便&#xff0c;导致用户的流失和挫败感。例如&#xff1a; 用户在浏览器或社交平台上看到一…

看完这个你就牛了,自动化测试框架设计

一、引言 随着IT技术的快速发展&#xff0c;软件开发变得越来越快速和复杂化。在这种背景下&#xff0c;传统的手工测试方式已经无法满足测试需求&#xff0c;而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量&#xff0c;减少重复性的测试工作&#xff0c;从而…

前端大概要知道的 AST

认识 AST 定义&#xff1a;在计算机科学中&#xff0c;抽象语法树是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构&#xff0c;树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的&#xff0c;是因为这里的语法并不会表示出真实语法中…

手机测试—adb

一、Android Debug Bridge 1.1 Android系统主要的目录 1.2 ADB工具介绍 ADB的全称为Android Debug Bridge,就是起到调试桥的作用,是Android SDK里面一个多用途调试工具,通过它可以和Android设备或模拟器通信,借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多…

【负荷预测】基于VMD-SSA-LSTM光伏功率预测【可以换数据变为其他负荷等预测】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…