工作两年后,我如何看待设计模式

news2025/2/25 5:53:21

在软件工程中,设计模式是经过反复验证的最佳实践,用于解决在软件设计中经常遇到的一类问题。它们为开发者提供了一种通用的解决方案和语言,使得复杂的编程问题得以简化,代码结构更加清晰,可维护性大大提高。简而言之,设计模式在应用程序中可以被统称为"套路"。

这个"套路"即是以高内聚和低耦合为底层思想,并且符合OOD设计原则。所谓OOD设计原则就是:

  • 单一职责原则:每个类应该有一个清晰明了的职责,只做与自己主要职责相关的事情,避免加入其它不相关的职责。这有助于降低类的复杂度,提高代码的可读性和可维护性。
  • 开放-关闭原则(Open-Closed Principle):软件实体(如类、模块、函数等)应当对扩展开放,对修改关闭。这意味着当需要添加新功能时,应尽量避免修改已有的代码,而是通过扩展的方式来实现。这有助于保持软件的稳定性和可维护性。
  • 里氏替换原则(Liskov Substitution Principle):在继承体系中,子类应当能够替换其父类并保持在软件中的行为不变。这要求子类在继承父类时,必须遵循父类的约定,以确保软件行为的正确性。
  • 依赖倒置原则:高层模块不应该依赖于低层模块,它们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。这一原则有助于减少类之间的耦合度,提高系统的可维护性和可扩展性。
  • 接口隔离原则:客户端不应该依赖它不需要的接口,即多个特定的客户端接口要好于一个通用性的总接口。这有助于避免接口的过度臃肿,使接口更加精简和专注。
  • 迪米特法则(最少知道原则):一个对象应当对其他对象保持最少的了解,即只与直接的朋友通信。这有助于降低系统的复杂度,减少类之间的耦合度。

这些原则共同构成了OOD的基石,指导开发人员在设计面向对象系统时遵循最佳实践,以创建出更加灵活、可扩展且易于维护的软件系统。

设计模式与编程语言或编程范式有关吗?

但是我们要注意的是,在不同的编程范式(如结构化编程、面向对象编程、函数式编程)对设计模式的应用和实现也会有所不同。例如,在函数式编程中,可能会采用不同于面向对象编程的设计模式来解决问题。

编程语言的特性会影响设计模式的实现方式,但设计模式本身是独立于具体编程语言的。

在面向对象编程中我们通常有二十三种设计模式,它们被分为三大类型:

创建型模式主要处理对象的创建机制,旨在将系统与使用哪个具体类的信息隔离开来,使得系统能够独立于如何创建、组合和表示对象。

结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

行为型模式关注对象之间的通信。

那么我们在编程中使用设计模式时主要依赖于哪些思维?

首先,需要具备强大的抽象思维能力。设计模式本身就是一种高度抽象的概念,它们提取了软件开发中的共性问题和解决方案。因此,使用设计模式时需要我们能够从具体的编程问题中抽象出共性的结构和行为,以便正确地选择和应用设计模式。

其次,结构化思维对于理解和应用设计模式至关重要。设计模式通常涉及到多个类和对象之间的交互,这就要求我们能够清晰地理解和描述这些交互关系,以及它们在整体设计中的作用。结构化思维有助于我们将复杂的设计问题分解为更小、更易于管理的部分,并找出各部分之间的关系。

另外,灵活性和可扩展性思维也是应用设计模式时必不可少的。设计模式的目标之一就是提高软件系统的灵活性和可扩展性,使系统能够更容易地适应未来的变化。因此,开发者在应用设计模式时,需要时刻考虑如何在满足当前需求的同时,为未来的变化留下足够的空间。

最后,创新思维对于设计模式的应用也至关重要。虽然设计模式提供了一套通用的解决方案,但在实际应用中,往往需要根据项目的具体需求和约束进行适当的调整和创新。这就要求开发者不仅要熟悉设计模式的基本原理,还要具备足够的创新意识和实践能力,以便将设计模式与项目的实际情况相结合,创造出既符合设计要求又具有创新性的解决方案。

总的来说,设计模式是编程中一种宝贵的工具,它们能够帮助我们解决复杂的问题,提高代码的质量和维护性。但同时,我们也需要谨慎地使用它们,以确保它们能够真正地为我们的项目带来价值。

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

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

相关文章

FreeRTOS的任务间通信

文章目录 4 FreeRTOS任务间通信4.1 队列4.1.1 队列的使用4.1.2 队列的创建,删除,复位4.1.3 队列的发送,接收,查询 4.2 邮箱(mailbox)4.2.1 任务中读写邮箱4.2.2 中断中读写邮箱 4.3 队列集4.3.1 队列集的创…

使用块的网络 VGG

一、AlexNet与VGG 1、深度学习追求更深更大,使用VGG将卷积层组合为块 2、VGG块:3*3卷积(pad1,n层,m通道)、2*2最大池化层 二、VGG架构 1、多个VGG块后接全连接层 2、不同次数的重复块得到不同的架构&a…

系统集成项目管理工程师第12章思维导图发布

今天发布系统集成项目管理工程师新版第12章脑图的图片版

01背包问题-队列分支限界法-C++

0-1背包问题-队列分支限界法 问题描述: 给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?对于给定的n种物品的重量和价值,以及背包的容量&…

如何选择一家适合自己的商城源码?

商城源码的选择取决于多个因素,包括商城的功能需求、稳定性、易用性、可定制性以及价格等。启山智软作为在市场上被广泛认可且表现优异的商城源码提供商,具有以下的特点和优势: 特点①:国内知名的B2B2C开源商城源码系统&#xff…

Go语言--工程管理、临时/永久设置GOPATH、main函数以及init函数

工作区 Go 代码必须放在工作区中。工作区其实就是一个对应于特定工程的目录,它应包含3个子目录:src 目录、pkg目录和bin 目录。 src 目录:用于以代码包的形式组织并保存 Go源码文件。(比如:.go.chs等)pkg 目录:用于存放经由 go install 命令构建安装后的代码包(包…

东芝TB6560AHQ/AFG步进电机驱动IC:解锁卓越的电机控制性能

作为一名工程师,一直在寻找可靠且高效的组件来应用于你的项目中。东芝的TB6560AHQ/AFG步进电机驱动IC能够提供精准且多功能的电机控制,完全符合现代应用的高要求,保证高性能和易用性。在这篇文章中,我们将探讨TB6560AHQ/AFG的主要…

陈志泊主编《数据库原理及应用教程第4版微课版》的实验题目参考答案实验2

实验目的 1.掌握在SQL Server中使用对象资源管理器和SQL命令创建数据库与修改数据库的方法。 2.掌握在SQL Server中使用对象资源管理器或者SQL命令创建数据表和修改数据表的方 法(以SQL命令为重点)。 实验设备 操作系统:Win11…

DEPTHAI 2.27.0 发布!

小伙伴们大家好,我们发布了DepthAI 2.27.0版本,本次对DepthAI库有了一些小更新,以下是更新内容。 功能 设置DEPTHAI_ENABLE_FEEDBACK_CRASHDUMP时自动故障转储收集; 漏洞修补 修复深度超出ImageAlign节点时生成PointCloud的问…

Matplotlib Artist 1 概览

Matplotlib API中有三层 matplotlib.backend_bases.FigureCanvas:绘制区域matplotlib.backend_bases.Renderer:控制如何在FigureCanvas上绘制matplotlib.artist.Artist:控制render如何进行绘制 开发者95%的时间都是在使用Artist。Artist有两…

Java开源ERP系统Axelor汉化方法初探

Axelor简介 汉化过程介绍 定义语言和本地化 导出多语言记录 导入翻译 验证翻译 调整翻译 Axelor简介 2024年6月份Axelor ERP发布了8.1版本,适配JDK11及PostgreSQL12及以上版本(7及以前版本适配JDK8及PostgreSQL10)数据库。v8版本较之前…

景区气象站:守护旅行安全的智能向导

在繁忙的现代社会,人们越来越渴望逃离城市的喧嚣,寻找一处宁静的自然之地放松身心。景区,作为大自然与人类文明交织的瑰宝,吸引了无数游客前来探访。然而,多变的天气往往给游客的旅行带来不确定性。 景区气象站&#x…

Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法,透过这些方法,在电脑中使用不同的色彩模式开启图片并显示图片。 imread() 开启图片 使用imread() 方法,可以开启图片,imread() 有两个参数,第一个参数为档…

nginx的正向代理和反向代理以及tomcat

nginx的正向代理和反向代理: 正向代理以及缓存配置: 代理:客户端不再是直接访问服务端,通过代理服务器访问服务端。 正向代理:面向客户端,我们通过代理服务器的IP地址访问目标范围端。 服务端只知道代理…

10.x86游戏实战-汇编指令lea

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

云端AI大模型群体智慧后台架构思考

1 大模型的调研 1.1 主流的大模型 openai-chatgpt 阿里巴巴-通义千问 一个专门响应人类指令的大模型。我是效率助手,也是点子生成机,我服务于人类,致力于让生活更美好。 百度-文心一言(千帆大模型) 文心一言"…

Web漏洞扫描工具AppScan与AWVS测评及使用体验

AppScan和AWVS业界知名的Web漏洞扫描工具,你是否也好奇到底哪一个能力更胜一筹呢?接下来跟随博主一探究竟吧。 1. 方案概览 第一步:安装一个用于评测的Web漏洞靶场(本文采用最知名和最广泛使用的靶场,即OWASP Benchma…

04.ffmpeg打印音视频媒体信息

目录 1、相关头文件 2、相关结构体 3、相关函数 4、函数详解 5、源码附上 1、相关头文件 #include <libavformat/avformat.h> 包含格式相关的函数和数据结构 #include <libavutil/avutil.h> 包含一些通用实用函数 2、相关结构体 AV…

Redis基础教程(九):redis有序集合

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

Zabbix触发器

目录 触发器基础概念 创建和管理触发器 示例 定义一个触发器 在 Zabbix 中&#xff0c;触发器&#xff08;Trigger&#xff09;用于定义在监控数据满足特定条件时触发警报或动作。触发器是实现监控告警和自动响应的核心组件之一。以下是关于 Zabbix 触发器的详细解释和用法…