当前位置: 首页 > news >正文

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

引言

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

分类

设计模式共分为三大类:创建型模式、结构型模式和行为型模式。以下是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年出版,被誉为设计模式的经典之作。自那以后,设计模式逐渐成为软件工程领域的重要概念,并在各类项目中得到广泛应用。

使用场景

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

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

结语

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

相关文章:

  • BOOT电路
  • 【4.3计算机网络】网络规划与设计
  • QT C++实践|超详细数据库的连接和增删改查操作|附源码
  • 【k8s配置与存储--持久化存储(HostPath、EmptyDir、NFS)】
  • 【查漏补缺你的Vue基础】Vue数据监听深度解析
  • SQL函数学习记录
  • mac m3安装nvm安装说明;mac安装xbrew
  • 【机器人最短路径规划问题(栅格地图)】基于遗传算法求解
  • 【GB28181】wvp-GB28181-pro快速修改登录页面名称(前端)
  • 拉美巴西阿根廷媒体宣发稿墨西哥哥伦比亚新闻营销如何助推跨境出海推广?
  • springboot/ssm学院个人信息管理系统Java高校课程作业管理系统web
  • 数仓模型设计方法论
  • 自然语言处理Gensim入门:建模与模型保存
  • 软件设计模式:适配器模式详解
  • day02_前后端环境搭建(前端工程搭建,登录功能说明,后端项目搭建)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 2017前端实习生面试总结
  • git 常用命令
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • ReactNative开发常用的三方模块
  • Redux 中间件分析
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue.js框架原理浅析
  • Web设计流程优化:网页效果图设计新思路
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于使用markdown的方法(引自CSDN教程)
  • 利用jquery编写加法运算验证码
  • 漂亮刷新控件-iOS
  • 如何胜任知名企业的商业数据分析师?
  • 实习面试笔记
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我的zsh配置, 2019最新方案
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • FaaS 的简单实践
  • Python 之网络式编程
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​马来语翻译中文去哪比较好?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #、%和$符号在OGNL表达式中经常出现
  • #pragam once 和 #ifndef 预编译头
  • $jQuery 重写Alert样式方法
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (ros//EnvironmentVariables)ros环境变量
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二开)Flink 修改源码拓展 SQL 语法
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (篇九)MySQL常用内置函数
  • (生成器)yield与(迭代器)generator
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net Remoting(分离服务程序实现) - Part.3