设计模式:软件工程的艺术

引言

设计模式是软件工程中一种解决常见问题的经验总结,是一套可复用的设计思想。它们提供了在特定情境下的解决方案,有助于构建可维护、灵活、可复用、可扩展的软件系统。设计模式是对软件设计中通用问题的抽象,提供了一种共享的语言和思维模式,使得开发者能够更容易地理解和交流。

分类

设计模式共分为三大类:创建型模式、结构型模式和行为型模式。以下是23种设计模式的详细介绍。

1. 创建型模式

  • 单例模式(Singleton)
  • 简单工厂模式(Simple Factory)
  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)
  • 建造者模式(Builder)
  • 原型模式(Prototype)

2. 结构型模式

  • 适配器模式(Adapter)
  • 桥接模式(Bridge)
  • 组合模式(Composite)
  • 装饰器模式(Decorator)
  • 外观模式(Facade)
  • 享元模式(Flyweight)
  • 代理模式(Proxy)

3. 行为型模式

  • 责任链模式(Chain of Responsibility)
  • 命令模式(Command)
  • 解释器模式(Interpreter)
  • 迭代器模式(Iterator)
  • 中介者模式(Mediator)
  • 备忘录模式(Memento)
  • 观察者模式(Observer)
  • 状态模式(State)
  • 策略模式(Strategy)
  • 模板方法模式(Template Method)
  • 访问者模式(Visitor)

发展历程

设计模式的概念最早由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四位作者在《设计模式:可复用面向对象软件的基础》一书中提出。该书于1994年出版,被誉为设计模式的经典之作。自那以后,设计模式逐渐成为软件工程领域的重要概念,并在各类项目中得到广泛应用。

使用场景

设计模式的使用场景因模式类型而异,但总体而言,设计模式在以下情境中尤为有用:

  • 系统需要独立于其构件的创建、组合和表示。
  • 多个对象协同工作以完成某一任务。
  • 系统需要在运行时根据用户的需求来配置组件。
  • 需要在不同时间点选择算法。
  • 系统需要支持对象的可拓展性。

结语

设计模式是软件工程中的重要工具,它们为开发者提供了解决常见问题的有效方法。通过应用设计模式,开发者能够创建出更加灵活、可维护且具有高度可扩展性的软件系统。设计模式是软件工程的艺术,是开发者经验的总结,也是推动软件行业不断进步的动力之一。

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

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

相关文章

Vue3项目结构分析

node_modules: 是项目npm install下载的node依赖库。 public: favicon.ico: 网页图标logo图片。index.html: 入口html。是一个基础的html页面,其中进行网页最基础的设置,并且设置了id为app的div盒子。该页面即为Vue单页面应用的基础页面。后…

《Docker 简易速速上手小册》第5章 Docker Compose 与服务编排(2024 最新版)

文章目录 5.1 理解 Docker Compose5.1.1 重点基础知识5.1.2 重点案例:部署 Flask 应用和 Redis5.1.3 拓展案例 1:多服务协作5.1.4 拓展案例 2:使用自定义网络 5.2 编排多容器应用5.2.1 重点基础知识5.2.2 重点案例:部署 Flask 应用…

Self-attention与Word2Vec

Self-attention(自注意力)和 Word2Vec 是两种不同的词嵌入技术,用于将单词映射到低维向量空间。它们之间的区别: Word2Vec: Word2Vec 是一种传统的词嵌入(word embedding)方法,旨在为…

使用 Docker 安装 Kibana 8.4.3

使用 Docker 安装 Kibana 8.4.3 一. 安装启动 Kibana 8.4.3二. 简单使用2.1 向 Elasticsearch 发送请求2.2 搜索2.3 整体页面 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 安装k…

人工智能何时会拥有自由意志?

一、自由意志的来源 人类的自由意志是一个复杂而深奥的概念,它涉及到哲学、心理学、神经科学等多个学科领域。目前并没有一个统一且被广泛接受的答案来完全解释自由意志如何形成,但可以从多个角度探讨其可能性和相关理论: 1. **哲学视角**&…

【MATLAB】ICEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 ICEEMDAN是指“改进的完全扩展经验模态分解与自适应噪声”(Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise),它是CEEM…

体验LobeChat搭建私人ChatGPT

LobeChat是什么 LobeChat 是开源的高性能聊天机器人框架,支持语音合成、多模态、可扩展的(Function Call)插件系统。支持一键免费部署私人 ChatGPT/LLM 网页应用程序。 地址:github.com/lobehub/lob… 为什么要用LobeChat 有些朋…

成功解决No module named ‘skimage‘(ModuleNotFoundError)

成功解决No module named ‘skimage’(ModuleNotFoundError) 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您…

MyBatis的⾼级映射及延迟加载

MyBatis的⾼级映射及延迟加载 一、多对一1.方式一:级联属性映射2.方式二:association3.方式三:分步查询 二、一对多1.方式一:collection2.方式二:分步查询 三、延迟加载(懒加载)1.分步查询的优点…

神经网络系列---计算图基本原理

文章目录 计算图符号微分符号微分的步骤示例符号微分在计算图中的使用总结 数值微分前向差分法中心差分法数值微分的使用注意事项总结 自动微分1. 基本原理2. 主要类型3. 计算图4. 应用5. 工具和库6. 优点和缺点 计算图1. **计算图的建立**2. **前向传播**3. **反向传播**4. **…

torch\tensorflow在大语言模型LLM中的作用

文章目录 torch\tensorflow在大语言模型LLM中的作用 torch\tensorflow在大语言模型LLM中的作用 在大型语言模型(LLM)中,PyTorch和TensorFlow这两个深度学习框架起着至关重要的作用。它们为构建、训练和部署LLM提供了必要的工具和基础设施。 …

Stable Diffusion 绘画入门教程(webui)-ControlNet(Inpaint)

上篇文章介绍了语义分割Tile/Blur,这篇文章介绍下Inpaint(重绘) Inpaint类似于图生图的局部重绘,但是Inpain效果要更好一点,和原图融合会更加融洽,下面是案例,可以看下效果(左侧原图…

7、Linux软件包管理、软件安装

三、软件包管理 1.文件上传与下载 用来做文件上传与下载的 先下载 lrzsz 工具 yum install lrzszrz 从windows 上传文件到 linux rz 会弹出一个选择框sz 从linux 上下载软件到 windows sz 文件名应用场景 修改上传配置文件上传 jar 包 2.RMP 包管理(了解一下就行) 2.1概述…

小红书商业体系,一文通

2024-02-23-小红书商业体系 大家好,我是周萝卜 今天分享一篇玩赚新媒的精华帖《小红书商业知识体系》 之所以分享这一篇,主要还是小红书的的确确是当下最值得深耕的赛道之一,而且这篇文章写的太好了,全程干货,毫无水…

旋转齿轮加载

效果演示 实现了一个旋转齿轮的动画效果。具体来说,页面背景为深灰色,中间有一个齿轮装置,包括四个齿轮。每个齿轮都有内部的齿轮条,整体呈现出旋转的效果。其中,齿轮2是顺时针旋转的,齿轮1、3、4是逆时针旋…

文件上传失败原因汇总(个人情况总结)

1.后端配置application里有服务限制大小 # Spring spring:servlet:multipart:max-file-size: 500MBmax-request-size: 500MB 2.如果你用了dubbo,要调整生产者和消费者超时时间以及payload大小,最好是dubbo自增策略,防止用了dubbo的服务端口冲…

GEE案例(python)——利用谷歌地球引擎中的交互式桑基图可视化分类时间序列数据的变化(2000-2020年不同土地转化可视化)

简介 使用地球引擎(Earth Engine)可视化土地植被、植物健康、焚烧严重程度或任何其他时间序列分类图像的变化,并配有交互式桑基图。使用内置数据集库方便快捷,也可灵活定义自己的自定义数据集。 谷歌地球引擎(Google Earth Engine)是一个强大的云平台,用于存储、处理和…

computed/watch深度监听

在 Vue.js 中,computed 和 watch 是两种处理动态数据变化并触发相应逻辑的方法,但它们的工作方式和用途有所不同。 computed computed 属性用于声明一个依赖于其它响应式数据(如 data、props 或其他 computed 属性)的属性。当这…

纳斯达克大屏-投放需要知道的几个条件-大舍传媒

引言 随着移动互联网的快速发展,数字广告媒体广告越来越受到企业的关注。纳斯达克大屏作为全球最大的数字媒体广告投放平台之一,拥有广泛的受众和优质的媒体资源,吸引了众多企业的眼球。要想在纳斯达克大屏上投放广告,企业需要了…

常用软件下载地址

Git: Git - Downloading Package TortoiseGit: download.TortoiseGit.org – Index of /tgit/