设计模式:软件工程的艺术
引言
设计模式是软件工程中一种解决常见问题的经验总结,是一套可复用的设计思想。它们提供了在特定情境下的解决方案,有助于构建可维护、灵活、可复用、可扩展的软件系统。设计模式是对软件设计中通用问题的抽象,提供了一种共享的语言和思维模式,使得开发者能够更容易地理解和交流。
分类
设计模式共分为三大类:创建型模式、结构型模式和行为型模式。以下是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年出版,被誉为设计模式的经典之作。自那以后,设计模式逐渐成为软件工程领域的重要概念,并在各类项目中得到广泛应用。
使用场景
设计模式的使用场景因模式类型而异,但总体而言,设计模式在以下情境中尤为有用:
- 系统需要独立于其构件的创建、组合和表示。
- 多个对象协同工作以完成某一任务。
- 系统需要在运行时根据用户的需求来配置组件。
- 需要在不同时间点选择算法。
- 系统需要支持对象的可拓展性。
结语
设计模式是软件工程中的重要工具,它们为开发者提供了解决常见问题的有效方法。通过应用设计模式,开发者能够创建出更加灵活、可维护且具有高度可扩展性的软件系统。设计模式是软件工程的艺术,是开发者经验的总结,也是推动软件行业不断进步的动力之一。
相关文章:
设计模式:软件工程的艺术
引言 设计模式是软件工程中一种解决常见问题的经验总结,是一套可复用的设计思想。它们提供了在特定情境下的解决方案,有助于构建可维护、灵活、可复用、可扩展的软件系统。设计模式是对软件设计中通用问题的抽象,提供了一种共享的语言和思维…...
试题 算法训练 数的潜能
资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 将一个数N分为多个正整数之和,即Na1a2a3…ak,定义Ma1*a2*a3*…*ak为N的潜能。 给定N,…...
OpenAI Triton 入门教程
文章目录 Triton 简介背景Triton 与 CUDA 的关系 Triton 开发样例样例一:Triton vector addition 算子Triton kernel 实现kernel 函数封装函数调用性能测试 样例二:融合 Softmax 算子动机Triton kernel 实现kernel 封装单元测试性能测试 样例三ÿ…...
【flask+python】利用魔术方法,更优雅的封装model类
定义model # Time :2024-2024/2/27-14:49 # Email :514422868qq.com # Author :Justin # file :user.py # Software :01-fishbook from app.model.base import Base from sqlalchemy import Column, Integer, SmallInteger, String from werkzeug.security …...
Qt程序设计-报警灯自定义控件实例
本文讲解Qt报警灯自定义控件实例。 实现功能 设置边框和内部颜色。 设置是否闪烁点亮。 添加的报警灯类 #ifndef LIGHT_H #define LIGHT_H#include <QWidget> #include <QDebug> #include <QPainter> #include <QTimer>class Light : public QWid…...
Linux之定时任务02
一、什么是crond Linux 中 crond 就是定时任务,即根据 crond 指定的时间,由系统按指定的时间,周期性,自动触发的事件。 crond 服务在默认的情况下会每分钟检查系统中是否有定时任务,如果有且符合触发条件,…...
PHP堆栈+errLog定位
调用堆栈(Call Stack)是一个记录了程序在运行时所有活动子例程的栈结构。它以函数调用的方式描述了程序的执行流程和调用关系。 在PHP中,我们可以通过打印PHP调用堆栈来辅助调试和定位代码中的问题。本文将介绍如何在PHP中打印调用堆栈&…...
【大数据】Flink SQL 语法篇(七):Lookup Join、Array Expansion、Table Function
《Flink SQL 语法篇》系列,共包含以下 10 篇文章: Flink SQL 语法篇(一):CREATEFlink SQL 语法篇(二):WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 语法篇(三&…...
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:从入门到入魔》 🚀 本…...
springboot 实现本地文件存储
springboot 实现本地文件存储 实现过程 上传文件保存文件(本地磁盘)返回文件HTTP访问服务器路径给前端,进行效果展示 存储 服务端接收上传的目的是提供文件的访问服务,对于SpringBoot而言,其对静态资源访问提供了很…...
Python进阶学习:Pandas--查看DataFrame中每一列的数据类型
Python进阶学习:Pandas–查看DataFrame中每一列的数据类型 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…...
Groovy - 大数据共享搜索配置
数据共享搜索列中配置了搜索列,相应的数据共享接口中也需要支持根据配置的字段搜索,配置实体时,支持搜索的入参code必须是searchKeys,且接口应该是需要支持分页(入参必须是 current、pageSize)的。current …...
第三节:Vben Admin登录对接后端login接口
系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 文章目录 系列文章目录前言一、Flask项目介绍…...
关于CSS 优先级布局应用的教程
在前端开发中,CSS 的优先级布局是非常重要的一部分。通过合理地应用 CSS 优先级,我们可以更加灵活地控制页面的布局和样式。本教程将向您介绍如何利用 CSS 优先级进行布局,并通过实例展示其应用。 1. 了解 CSS 优先级 在 CSS 样式表中&…...
vue2+elementui上传照片(el-upload 超简单)
文章目录 element上传附件(el-upload 超详细)代码展示html代码data中methods中接口写法 总结 element上传附件(el-upload 超详细) 这个功能其实比较常见的功能,后台管理系统基本上都有,这就离不开element的…...
目标检测新SOTA:YOLOv9问世,新架构让传统卷积重焕生机(附代码)
在目标检测领域,YOLOv9 实现了一代更比一代强,利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 YOLOv8 正式发布一年多以后,YOLOv9 终于来了! 我们知道,YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Al…...
Javascript:输入输出
目录 一.前言 二.正文 1.输出 2.输入 3.字面量 概念: 三.结语 一.前言 Javascript作为运行浏览器的语言,对于学习前端的同学来说十分重要,那么从现在开始我们将开始介绍有关 Javascript。 二.正文 1.输出 document.write() : 向body内…...
Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”
文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统,它与Apache Subversion(SVN)集成在一起,提供了一个用户友好的界面,方便用…...
HarmonyOS 开发之———应用程序入口—UIAbility的使用
谢谢关注!! 前言:上一篇文章主要介绍ArkJS 基础—〉自定义组件使用。如需了解谢谢查阅:http://t.csdnimg.cn/01PQ2 一、UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 …...
推荐几款优秀免费开源的导航网站
🦩van-nav 项目地址:van-nav项目介绍:一个轻量导航站,汇总你的所有服务。项目亮点:全平台支持,单文件部署,有配套浏览器插件。效果预览 🦩发现导航 项目地址:nav项目…...
从编译到心跳:手把手搞定libwebsockets v4.0的WSS加密连接与保活机制
从编译到心跳:手把手搞定libwebsockets v4.0的WSS加密连接与保活机制 在物联网和实时通信领域,WebSocket协议因其全双工通信特性成为长连接场景的首选方案。而libwebsockets作为轻量级C库,凭借其跨平台能力和对嵌入式环境的友好支持ÿ…...
从 0 到 1 用 Python 写一个最小可用 LangGraph 系统
从 0 到 1 用 Python 写一个最小可用 LangGraph 系统 关键词 LangGraph, LangChain, 状态机, 多Agent系统, 图结构, LLM应用, Python实现 摘要 在这篇技术博客中,我们将深入探讨LangGraph的核心概念,并从零开始构建一个最小可用的LangGraph系统。LangGraph是LangChain生态…...
【智能代码生成质量保障黄金法则】:20年架构师亲授5大代码审查自动化实战框架
第一章:智能代码生成代码质量保障 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成正从辅助编程工具演进为可参与核心交付的工程角色,其输出质量直接决定系统可靠性、可维护性与安全边界。保障质量不能依赖事后人工审查,而需在生…...
2026年灵敏感测实时微控制器选型:国内哪家厂商兼具精度与稳定性?
一、引言灵敏感测实时微控制器是工业自动化、汽车电子、智慧能源、机器人等领域嵌入式系统的核心控制单元,承担物理信号采集、实时运算与闭环控制的关键职能,其性能直接决定终端设备的控制精度、响应速度与运行稳定性。当前工业智能化与汽车电子化进程中…...
从色温窗口到增益系数:一种硬件友好的实时白平衡方案
1. 为什么我们需要硬件友好的白平衡方案 每次用手机拍出来的照片颜色不对劲,你是不是总觉得是手机摄像头不行?其实很多时候问题出在白平衡上。白平衡就像是给照片戴了一副"有色眼镜",它的任务是消除光源色温对颜色的影响࿰…...
从人工撰写到秒级交付,AI生成接口文档的准确率跃升至98.7%——2026奇点大会白皮书首曝训练数据闭环架构
第一章:从人工撰写到秒级交付,AI生成接口文档的准确率跃升至98.7%——2026奇点大会白皮书首曝训练数据闭环架构 2026奇点智能技术大会(https://ml-summit.org) 传统接口文档编写依赖开发者手动同步代码变更、补充参数说明与示例请求,平均耗时…...
ESP32+LVGL8.1实战:用陀螺仪模拟编码器输入(附完整代码)
ESP32LVGL8.1实战:用陀螺仪模拟编码器输入(附完整代码) 在嵌入式界面开发中,输入控制方式往往决定了用户体验的流畅度。传统编码器虽然可靠,但体积和成本限制了其在小型设备中的应用。本文将展示如何利用ESP32内置的加…...
5分钟快速上手Qwerty Learner:提升英语打字效率的终极指南
5分钟快速上手Qwerty Learner:提升英语打字效率的终极指南 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https:/…...
5分钟从图片到3D实物:开源神器ImageToSTL完全指南
5分钟从图片到3D实物:开源神器ImageToSTL完全指南 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项…...
从单缝到光栅:光的衍射原理与工程应用解析
1. 光的衍射基础:从现象到原理 第一次用激光笔照射头发丝时,我盯着墙上突然出现的光斑愣住了——明明应该被遮挡的区域,却出现了向外扩散的条纹。这种反直觉的现象,正是光的衍射最直观的展现。当光波遇到与波长尺度相当的障碍物时…...
