设计模式学习笔记(一)——六大设计原则

六大设计原则 本文主要阐述了设计模式的六大设计原则,掌握6大设计原则是应用23种设计模式的关键很多讲解设计模式的博主都忽视了设计原则的重要性,大部分讲解都是尽可能让你理解设计模式的基本原理,但在实际的项目开发中,你真的会使用吗?只有熟悉了基本的设计原则,才能设计出易于维护和扩展的软件架构。在学习设计原则之前,需得对抽象有一定的了解。不管是单个抽象,还是多重抽象,抽象始终是设计原则的核心。实际编程面对需求时,针对某一模块的功能处理,始终把抽象放在心里。C++抽象类。 阅读详情

一、六大设计原则概述

构成:在面向对象五大设计原则(SOLID 原则)基础上加上迪米特法则,即:
- 单一职责原则(Single Responsibility Principle)
- 开闭原则(Open/Closed Principle)
- 里氏替换原则(Liskov Substitution Principle)
- 接口隔离原则(Interface Segregation Principle)
- 依赖倒置原则(Dependency Inversion Principle)
- 迪米特法则(Law of Demeter)

设计原则处于语法规则和常见设计模式之间。语法规则必须严格遵守,否则程序无法正常运行或编译;设计模式用于优化程序设计架构,可根据情况适度使用;六大原则不严格遵守程序仍能运行,但违背会使代码设计从设计层面绝对错误,极具破坏性,因此被称为原则或法则。

二、具体原则

1. 单一职责原则

一个类只能承担一种功能。

  • 目的
    • 降低耦合性:出现问题时方便定位和调试。
    • 增强可读性和可维护性:功能越少代码越清晰,更新迭代时关注范围窄,不易遗漏。
    • 提高复用性:功能拆分越细,越容易无副作用地用同一套代码解决相似需求。

严格遵循单一职责原则会使代码繁重且灵活性差,可考虑组合模式或 ECS 架构思想。

2. 开闭原则

对扩展开放,对修改封闭。需求改变时,通过扩展编写新代码而非修改已有代码来实现功能变更或添加新功能模块。

  • 目的
    • 降低风险:修改已稳定的代码可能会引入新Bug,扩展可以降低风险,避免触动未知代码引发雪崩效应,在团队协同开发中尤为重要。
    • 提升效率:提前设计好扩展性强的系统,为后续迭代节省时间成本。
  • 实践形式:子类重写父类方法,如在模板方法模式中父类决定算法骨架、子类重写算法步骤。
3. 里氏替换原则

所有父类出现的地方都可以使用子类对象来替换,且不会改变程序的正确性,是对继承逻辑正确性的保障,确保多态机制正常发挥作用。

  • 目的
    • 保障继承体系的正确性:如果子类不完全遵循父类契约,调用者可能会遇到意想不到的问题。
    • 提高代码复用性:符合LSP的设计能使多态机制充分发挥作用,增强系统扩展性。
  • 实现要求
    • 子类方法参数:必须与父类参数类型相匹配,或更加抽象。
    • 子类方法返回值:必须与父类方法返回值类型或其子类型相匹配。
    • 异常处理:父类中的方法不应该抛出基类方法预期之外的异常类型。
    • 前置条件:子类不应该加强其前置条件。
    • 后置条件:子类不能削弱其后置条件。
    • 不变量:父类的不变量(形式上的规则)必须保留。
    • 私有成员变量:子类不能修改父类中私有成员变量的值(无论当前的开发语言是否在语法层面进行了限制)。
4. 接口隔离原则

核心是将大而全的通讯接口拆分成更小、关注点更精细的细分接口,避免多余依赖和耦合,增强灵活性。

如游戏对象设计可拆分为更新和渲染两个接口逻辑,玩家角色实现可更新和可渲染接口,静态背景仅实现渲染接口。

与单一职责原则关系:与单一职责原则异曲同工,都旨在减少依赖和耦合。

5. 依赖倒置原则

高层次的类不应该依赖低层次的类,而是将二者的依赖转嫁到抽象接口之上。高层次类指软件层面的功能,如按钮响应、界面显示等,低层次类指底层架构,如文件 IO、网络通信、数据库连接等。

如游戏业务逻辑类(Game 类)设计之初依赖低层次的网络通信类(TCP 类),后续更换协议时若直接依赖具体类则需修改内部代码,而抽象出网络接口(Network 接口)后,Game 类仅调用抽象接口的 Send 与 Receive 方法,切换底层实现时高层代码无需修改。

要求:对开发者架构能力要求高,避免业务类直接依赖具体的底层实现。

6. 迪米特法则(最少知识原则)

一个对象只与其最直接关联的对象进行通信,避免与陌生对象产生耦合,减少链式调用和过多间接依赖。

如Player需要给Pet喂食,应该直接与Pet对象通信,而不是调用Hand对象,再通过Hand对象调用Pet的喂食逻辑。

  • 目的:
    • 降低系统耦合性:减少单个对象变化引发调用链上其他对象功能问题的风险,防止因某个对象的变化影响过多其他对象。
    • 增强系统稳定性:每个模块只关注自己的直接关系,便于测试和维护。

三、总结

六大设计原则适用于几乎所有使用面向对象思想进行架构的软件开发,初学时可能觉得遵循这些原则多此一举、干扰编码思路,但有意识地遵守、思考和反思,这些规范在未来开发生涯中大有用处。

设计模式--六大设计原则 (SOLID) 古人云: 有道无术,术可求.有术无道,止于术. 而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。 阅读详情

相关推荐

【Java】六大设计原则和23种设计模式

代理模式给某一个对象提供一个代理对象并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。

weixin_71491685的博客 2094

设计模式之六大设计原则

古人云: 有道无术,术可求.有术无道,止于术.而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下:​1、单一职责原则(Single Responsibitity Principle)​2、开放封闭原则(Open Close Principle)​。

在青海看海的企鹅的博客 2922

Android HDMI-CEC协议解析:从机顶盒到电视的无缝遥控联动

本文深入解析Android HDMI-CEC协议,实现机顶盒与电视间的无缝遥控联动。通过剖析设备角色、消息格式及核心操作码,并结合Android HdmiControlManager API实战,详细讲解如何实现电源同步、按键穿透及音量控制,最终解决多设备遥控繁琐的痛点,提升用户体验。

egg99的博客 973

六大设计原则及23种设计模式

包含六大设计原则及23种设计模式

weixin_45692534的博客 2639

uniapp无感刷新token实现过程

可以看到已经触发了刷新token接口,并且重新请求上次失败的列表接口,无感刷新token逻辑已经正常,但为什么列表接口请求成功,还一直loading没关闭捏,就是因为后续代码未执行,await接口的返回没有成功resolve。路漫漫其修远兮,前端道路逐渐迷茫,时隔好久好久终于想起了我还有一个小博客,最近在一直在弄uniapp,属实有被恶心到,但也至少会用了,最近实现了一个比较通用的功能,就是无感刷新token,但在过程中发现一个问题就是。3、排查await的列表接口为何没有成功resolve。

weixin_40618068的博客 3594

ESP32C3的I2S接口详解:以驱动PCM5102A为例,避开时序与配置的那些坑

本文深入解析ESP32C3的I2S接口驱动PCM5102A DAC的完整解决方案,涵盖时序对齐、PCB优化和寄存器级配置。通过实际案例分享时钟树分析、信号完整性设计和底层调试技巧,帮助开发者避开常见陷阱,实现高质量音频输出。重点探讨了I2S协议栈、电源滤波优化及DMA传输异常处理等关键技术要点。

weixin_30254435的博客 298

【设计模式精讲】六大设计原则 (SOLID)

古人云: 有道无术,术可求.有术无道,止于术.而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下:​1、单一职责原则(Single Responsibitity Principle)​2、开放封闭原则(Open Close Principle)​。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

伺服驱动器485通信

485通信使用方法,485通信在上位机和伺服驱动器之间的应用,根据需要驱动电机旋转。

haipi511715316的博客 1万+

【设计模式】六大设计原则

毕竟现实中都是实在的量,接口有几个参数,我继承了几个类,等等。所以我要说的是,如果违背原则的代价可以承受,那就可以违背原则。更注重设计的利弊思辨,而不是一个固定的答案。我认为仔细揣摩这六大原则,使用六大原则来分析23种设计模式的利弊,才是学习设计模式的正途。所以,如果几个职责的实现不会有太大变化,或者这些职责只在一个地方用的时候,违背这个原则也无碍。六大设计原则,是针对面向对象的设计模式的原则,也就是针对 封装、继承和多态 的使用原则。但说到底,职责的划分也是设计,把两件事当做一个职责也不是不可能。

weixin_43233774的博客 1016

从0到1:.NET 9 OpenAPI全攻略!Swagger vs Scalar UI谁更强?

OpenAPI:.NET 9的智能文档革命 本文深入解析.NET 9的OpenAPI支持,对比Swagger UI与Scalar UI的优劣,提供实战代码示例: 一键生成:AddOpenApi()+MapOpenApi()快速生成标准文档 UI工具对决: Swagger UI功能全面但复杂 Scalar UI简约现代,原生支持cURL/HTTPie 进阶技巧: XML注释增强文档可读性 自定义Transformer实现文档动态修改 🔥核心价值:.NET 9的OpenAPI方案显著降低API文档维护成本,开

java专栏 1427

cartographer ceres后端优化

这里引用一篇文章作用一:用户可以选择使用Problem::AddParameterBlock显式添加参数块;在显式添加的时候ceres会内部进行额外的正确性检查。当Problem::AddParameterBlock()不存在时,Problem::AddResidualBlock()会隐式添加参数块,因此不需要显式调用Problem::AddParameterBlock()函数。ps:类似构造函数,显式构造函数。

南北粉面馆 802

六大设计原则 (SOLID)

设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下

qq_45110186的博客 3078

【图像去噪】论文精读:AKDT: Adaptive Kernel Dilation Transformer for Effective Image Denoising

论文题目:AKDT: Adaptive Kernel Dilation Transformer for Effective Image Denoising —— AKDT:用于有效图像去噪的自适应核膨胀Transformer图像去噪是一项基本但具有挑战性的任务,特别是在处理高分辨率图像和复杂的噪声模式时。大多数现有方法依赖于标准的 Transformer 架构,该架构通常计算复杂度高,并且对不同噪声水平的适应性有限。在本文中,我们介绍了自适应核膨胀Transformer(AKDT)

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1044

设计模式必知—— 六大设计原则(一)

六大设计原则(SOLID)是软件开发中的核心设计准则,旨在构建稳定、灵活且健壮的程序。这些原则包括:单一职责原则(SRP),强调一个类或模块只负责一个功能;开放封闭原则(OCP),要求对扩展开放,对修改关闭;里氏替换原则(LSP),确保子类能够替换父类而不影响程序行为;接口分离原则(ISP),提倡将大接口拆分为更小的、特定功能的接口;依赖倒置原则(DIP),主张高层模块不应依赖低层模块,两者都应依赖抽象;迪米特法则(LoD),强调对象之间的松耦合。通过遵循这些原则,开发者可以设计出更易于维护和扩展的软件系统

weixin_47088026的博客 897

YOLO11 改进系列 | 引入2023年 MLCA 的 C3k2_MLCA 模块,近零参数开销的本地-全局通道注意力,适合检测与分割特征增强

本文提出将MLCA(混合局部通道注意力)模块嵌入YOLOv11的C3k2框架中,形成C3k2_MLCA改进结构。该模块通过5×5局部池化和1×1全局池化双路融合,结合ECA式Conv1d生成通道注意力,在几乎不增加参数量的前提下(仅增加66个参数),实现了局部空间信息与全局通道统计的联合建模。相比传统SE和ECA注意力,MLCA保留了空间分布信息,更适合实例分割等需要精细定位的任务。实验表明改进后模型参数量仅增加0.002%,计算量基本不变,是一种高效的注意力增强方案。

qq_44224801的博客 92

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

⭐️C#零基础到入门 ⭐️| 带你认识编程中的—23种设计模式 & 六大设计原则

设计模式介绍。 设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式使代码开发真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。只有夯实地基搭好结构,才能盖好坚壮的大楼。也是我们迈向高级开发人员必经的一步。

努力前行,总会成为自己心中的那道光 5064

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【设计模式精解】六大设计原则

主要介绍了设计模式中的六大设计原则。开闭原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特原则,单一职责原则。这几大原则是设计模式使用的基础,在使用设计模式时,应该牢记这六大原则。

先做到 再看见 1376

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA设计模式总结之六大设计原则

问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的。迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。

“ 春风若有怜花意,能否许我再少年。” 1734

【设计模式】——六大设计原则

刚刚结束设计模式学习时,感觉哪哪的抓不住重点,虽然之前师傅给勾了写比较重要的设计模式,但是给我的感觉设计模式怎么全都一个样子。         通过对一些文章的浏览,简单的对设计原则总结了一下。        设计模式,就是设计范例。        是经典问题的解决方案,是可以让学习者举一反三的,有研究价值、有交流价值的例子。         设计模式的本质是面向对

王金龙 864

设计模式及六大设计原则简介

设计模式及六大设计原则简介 1. 设计模式简介 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。是软件开发人员在软件开发过程中面临一般问题的解决方案,这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性,使代码编写真正工程化。 2. 什么是GOF(四人帮...

这世上所有的久处不厌,都是因为用心 349

【设计模式】详解设计模式中的六大设计原则

针对单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则等六大设计原则进行详细讲解

qq_41526047的博客 917

设计原则与设计模式

六大设计原则和 23 种设计模式构成了软件设计的核心知识体系。六大设计原则为我们提供了高层次的指导方针,帮助我们从宏观角度构建合理、可维护的软件架构。而 23 种设计模式则是具体的实践工具,针对不同的场景和问题,提供了经过验证的解决方案。在实际的软件开发过程中,我们需要根据具体的业务需求和场景,灵活运用这些原则和模式。它们不是孤立存在的,而是相互关联、相互补充的。例如,在使用单例模式确保系统中某些资源唯一的同时,可能会遵循单一职责原则,让单例类专注于一项核心功能;

ByteBlossom 1251

设计模式系列,六大设计原则

设计模式和性能优化有没有关系?最近,我看到有人再讲性能优化的时候,讲到了“有些设计模式可以做到一定程度的性能优化”。我读书少,别骗我。我看过无数篇设计模式了,第一次听到有...

xmt1139057136的专栏 757

设计模式 | 详解常用设计模式(六大设计原则,单例模式,工厂模式,建造者模式,代理模式)

设计模式是前辈们总结出的开发经验,是一系列用来解决特定问题的套路。它不是语法规范,而是帮助我们提升代码复用性、可维护性、可读性、稳健性以及安全性的一套方案。设计模式提供了一种优化代码的方式,通过标准化、模块化的设计,能够帮助我们提高系统的可维护性、可扩展性和可复用性。掌握这些设计模式和原则,将有助于开发高质量的代码,并且在实际开发中轻松应对复杂问题。🎯掌握设计模式= 更加优雅、灵活的编程!

mooridy的博客 1276

学习6大设计原则、23种设计模式

        了解设计模式的朋友们,想必都听说过“六大设计原则”吧。其实最经典的 23 种设计模式中或多或少地都在使用这些设计原则,也就是说,设计模式是站在设计原则的基础之上的。所以在学习设计模式之前,很有必要对这些设计原则先做一下了解。1、单一职责原则There should never be more than one reason for a class to change.理解:不同的类...

和光同尘的博客 3万+
下一篇: 创建型设计模式之工厂方法模式
WDaMu
博客等级 码龄4年 27粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值