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

一篇文章带你搞懂“设计模式”! - - 七大原则(1)

设计模式的七大原则

设计模式是为了让程序具有更好的:

代码可重用性、可读性、可扩展性、可靠性、呈现高内聚,低耦合。

单一职责原则

对类来说,一个类应该只负责一项职责。如果类A负责两个不同的职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。

注意事项

    • 降低类的复杂度,一个类只负责一项职责。
    • 提高类的可读性,可维护性。
    • 降低变更引起的风险。
    • 通常情况下,应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,才可以在方法级别保持单一职责原则。
接口隔离原则

类不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上

(把接口从左图一个叫接口,拆分成右图三个接口)

依赖倒转(倒置)原则

高层模块不应该依赖底层模块,二者都应该依赖其抽象。

抽象不应该依赖细节,细节应该依赖抽象。

依赖倒转的中心思想是面向接口编程

依赖关系传递的三种方式:

    • 接口传递
    • 构造方法传递
    • setter方法传递

注意事项

    • 底层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好。
    • 变量的声明类型尽量是抽象类或接口,这样变量引用和实习对象间,就存在一个缓冲层,利于程序的扩展和优化
    • 继承时遵循里氏替换原则
里氏替换原则

所有引用基类的地方必须能透明地使用其子类的对象

在使用继承时,遵循里氏替换原则,则在子类中尽量不要重写父类的方法

里氏替换原则说明,继承实际上让两个类耦合性增强,在适当情况下,可以通过集合,组合,依赖来解决问题

开闭原则

开闭原则是最基础,也是最重要的设计原则,是设计模式的目的

一个软件实体(类、模块和函数等)应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

即要让代码遵循OCP原则

迪米特法则(最少知道原则)

一个对象应该对其他对象保持最少的了解,即不属于我的部分,你要自己实现。

迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。即对于被依赖的类不管多么复杂,尽量将逻辑封装在自己类的内部。对外除了提供的public方法,不泄漏任何信息

迪米特法则还有个更简单的定义:只与直接的朋友通信

直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部

迪米特法则的核心是降低类之间的耦合,但注意,由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖。

合成复用原则

原则是尽量使用合成/聚合的方式,而不是使用继承。

http://www.jsqmd.com/news/412933/

相关文章:

  • 一篇文章带你搞懂“设计模式”! - - 单例模式(2)
  • 大规模语言模型在自动编程助手中的交互式应用
  • 慧课方舟测试报告
  • 年后大家别轻易离职了!!!
  • 数据科学在大数据领域的美容行业数据洞察
  • 手把手教你用Qwen3-ASR搭建智能语音转文字服务
  • 如何确认Windows电脑是否支持安装苹果系统?
  • 手把手教你用Qwen3-ASR-0.6B搭建语音识别服务
  • Gemma-3-270m零基础教程:5分钟部署你的首个文本生成AI
  • AnimateDiff写实人物生成:让虚拟主播动起来
  • ESP32-CAM串口传图与横屏显示全链路实现
  • Xinference轻松上手:SSH远程部署指南
  • 在 Ubuntu 上安装 virt-manager
  • IT数学基础番外7--卡尔曼滤波的数学解释(TODO)
  • Z-Image i2L性能优化:如何在低配电脑上流畅运行
  • ESP32-CAM与主控双机UART通信架构设计
  • Java Web 和餐饮管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • AcousticSense AI开发者案例:嵌入式音频分析服务API封装实践
  • LingBot-Depth入门指南:深度图单位毫米与实际物理尺寸换算方法
  • 【毕业设计】SpringBoot+Vue+MySQL 在线互动学习网站平台源码+数据库+论文+部署文档
  • Qwen3-ASR-1.7B智能家居应用:语音控制中枢实践
  • SpringBoot+Vue 毕业就业信息管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • ESP32-CAM与主控ESP32的UART点对点通信实战
  • 如何高效获取Gofile资源?这款Python工具让下载效率提升数倍
  • Qwen3-ForcedAligner实战案例:如何高效制作语音时间轴
  • SenseVoice-Small模型在呼叫中心语音分析中的实践
  • 掌握4大核心功能:Driver Store Explorer让Windows驱动管理效率提升90%
  • 实测分享:Qwen3-0.6B-FP8极速对话工具在低配电脑上的表现
  • Qwen3-Reranker Semantic Refiner应用案例:电商知识库RAG精度提升42%实录
  • Zotero插件市场彻底改变文献管理方式:让学术效率提升3倍