我终于读懂了设计模式的七大原则。。。

软件系统设计-原则模式期末复习 本文总结了软件系统设计中常用的设计原则和模式,为期末复习提供参考。重点内容包括:1. 七大设计原则(单一职责、开闭、里氏替换、依赖倒置、接口隔离、合成复用、迪米特法则)及其相互关系;2. 常用设计模式(策略、状态、工厂、建造者、原型、命令、观察者、中介者、模板方法、外观、适配器、组合、装饰)的实现原理、优缺点及适用场景;3. UML六种箭头关系的识别;4. 典型考题解析,如策略与状态模式的区别、最小知识原则的应用等。文章通过具体代码示例说明各模式的实现方式,并分析其遵循的设计原则,帮助理解如何在系统设计中灵 阅读详情

🐒设计模式的目的

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

  1. 代码重用性 (即:相同功能的代码,不用多次编写)
  2. 可读性 (即:编程规范性, 便于其他程序员的阅读和理解)
  3. 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
  4. 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)

设计模式常用的七大原则有:

  1. 🐴单一职责原则
  2. 🐤 接口隔离原则
  3. 🐫依赖倒转(倒置)原则
  4. 🐑里氏替换原则
  5. 🐘开闭原则
  6. 🐼迪米特法则
  7. 🐍合成复用原则

🐴什么叫单一职责原则?

一个类应该只负责一项职责

正常的代码

在这里插入图片描述
在方式 1 的 run 方法中,违反了单一职责原则

解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可

在这里插入图片描述

方案 2 的分析

遵守单一职责原则,但是这样做的改动很大,即将类分解,同时修改客户端
改进:直接修改 Vehicle 类,改动的代码会比较少=>方案 3

在这里插入图片描述
方案 3 的分析

这种修改方法没有对原来的类做大的修改,只是增加方法
这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责

单一职责原则注意事项和细节

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

🐤什么叫接口隔离原则?

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

正常的代码

在这里插入图片描述

这样浪费了太多不用的接口

在这里插入图片描述

我们要遵循的原则:只实现改实现的接口,将接口中的类隔离出来

🐫什么叫做依赖倒转原则?

  1. 高层模块不应该依赖低层模块,二者都应该依赖其抽象
  2. 抽象不应该依赖细节,细节应该依赖抽象
  3. 依赖倒转(倒置)的中心思想是面向接口编程
  4. 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java 中,抽象指的是接口或抽象类,细节就是具体的实现类
  5. 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成

在这里插入图片描述
方式 1 分析

  • 简单,比较容易想到
  • 如果我们获取的对象是 微信,短信等等,则新增类,同时 Perons 也要增加相应的接收方法
  • 解决思路:引入一个抽象的接口 IReceiver, 表示接收者, 这样 Person 类与接口 IReceiver 发生依赖,因为 Email, WeiXin 等等属于接收的范围,他们各自实现 IReceiver 接口就 ok, 这样我们就符合依赖倒转原则
    在这里插入图片描述

依赖倒转原则的注意事项和细节

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

🐑什么是里氏替换原则?

子类中尽量不要重写父类的方法

在这里插入图片描述
分析

  • 我们发现原来运行正常的相减功能发生了错误。原因就是类 B 无意中重写了父类的方法,造成原有功能出现错误。在实际编程中,我们常常会通过重写父类的方法完成新的功能,这样写起来虽然简单,但整个继承体系的复用性会比较差。特别是运行多态比较频繁的时候
  • 通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖,聚合,组合等关系代替.
    在这里插入图片描述

🐘什么叫开闭原则?

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化 对扩展开放(对提供方),对修改关闭(对使用方)

在这里插入图片描述
违反了设计模式的 ocp 原则,即对扩展开放(提供方),对修改关闭(使用方)。即当我们给类增加新功能的时候,尽量不修改代码,或者尽可能少修改代码.

在这里插入图片描述
思路:把创建 Shape 类做成抽象类,并提供一个抽象的 draw 方法,让子类去实现即可,这样我们有新的图形种类时,只需要让新的图形类继承 Shape,并实现 draw 方法即可,使用方的代码就不需要修-> 满足了开闭原则

🐼什么叫迪米特法则?

  1. 迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的
    public 方法,不对外泄露任何信息
  2. 迪米特法则还有个更简单的定义:只与直接的朋友通信
  3. 直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。

在这里插入图片描述

  1. 前面设计的问题在于 SchoolManager 中,CollegeEmployee 类并不是 SchoolManager 类的直接朋友(分析)
  2. 按照迪米特法则,应该避免类中出现这样非直接朋友关系的耦合
    在这里插入图片描述
    迪米特法则注意事项和细节
  • 迪米特法则的核心是降低类之间的耦合
  • 但是注意:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系

🐍什么叫合成复用原则?

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

🐔设计原则核心思想

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
  2. 针对接口编程,而不是针对实现编程。
  3. 为了交互对象之间的松耦合设计而努力

资料参考:https://www.bilibili.com/video/BV1G4411c7N4

直播间人气协议算法:从批量操作到数据接口的自动化实现 本文深入解析直播间人气协议算法的实现原理与技术细节,涵盖批量账号管理、IP代理方案、用户行为模拟算法及平台数据接口调用策略。通过逆向工程分析通信协议,结合算法设计实现自动化流量提升,同时探讨风控规避与系统性能优化方案,为开发者提供合规的技术实践参考。 阅读详情

相关推荐

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

设计模式学习——简介

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问...

weixin_30511039的博客 306

告别盲调!用Synopsys VIP搭建PCIe 5.0验证环境,手把手搞定链路训练与均衡调试

本文详细介绍了基于Synopsys VIP搭建PCIe 5.0验证环境的实战指南,重点解析了链路训练(LTSSM)与均衡调试的关键技术。通过配置VIP组件、设计验证平台架构及实战调试技巧,帮助工程师高效解决PCIe 5.0验证中的常见问题,提升芯片验证效率与可靠性。

weixin_28700411的博客 459

设计模式之禅5:迪米特法则

https://www.cnblogs.com/zh7791/p/7922960.html 定义: 一个对象应该对其他对象保持最少的了解。 问题由来: 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。 解决方案: 尽量降低类与类之间的耦合。   PS:   自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。 无论是面向过程编程还...

u013321328的专栏 908

【WSL2+Ubuntu+Docker Desktop】迁移到D盘

该篇文章包含将WSL2+ubuntu+Docker Desktop从C盘迁移到D盘

哈茶的博客 3930

海康工业相机SDK开发实战:从环境搭建到实时图像采集(附避坑指南)

本文详细介绍了海康工业相机SDK在Windows平台上的开发实战流程,涵盖从环境搭建、运行时库路径配置到实时图像采集的全过程。重点解析了MVS SDK部署、设备连接、参数设置及图像处理等核心环节,并提供了实用的避坑指南和错误排查方法,帮助开发者构建稳定的机器视觉系统。

weixin_29248611的博客 846

设计模式七大原则之迪米特法则(LoD)

迪米特法则(LoD) 基本介绍 1)一个对象应该对其他对象保持最少的了解 2)类与类关系越密切,耦合度越大 3)迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不泄露任何信息。 4)迪米特法则还有个更简单的定义:只与直接的朋友通信 5)直接的朋友...

qq_43774908的博客 344

【CAN总线测试】——通讯相关诊断测试

本章主要介绍通讯相关诊断测试用例设计

LOVE135149的博客 1815

❤️用一万字给小白全面讲解python编程基础问答❤️《记得收藏不然看着看着就不见了》

❤️用一万字给小白全面讲解python编程基础问答❤️《????记得收藏不然看着看着就不见了????》目录 ????开讲啦!!!! ????1、简述解释型和编译型(翻译型)编程语言 ????2、Python解释器种类以及特点 ????3、请至少列举5个 PEP8 规范(越多越好) ????4、通过代码实现如下转换 ????5、请编写一个函数实现将IP地址转换成一个整数 ????6、python递归的最大层数 ????7、Python求结果 ????8、Python中ascii、unicode

苏州程序大白的博客 3万+

汽车标定技术(七)--英飞凌TC3xx_Overlay实现页切换

今天说要开个专栏讲讲XCP标定,但在将标定之前,先把英飞凌专门为标定功能设计overlay功能讲解清楚。

认真搞搞汽车MCU 4017

【QGIS】软件下载安装及GIS4WRF插件使用

【QGIS】软件下载安装及GIS4WRF插件使用

WW、forever的博客 1800

Markdown实用小技巧: 个个用着都很爽

目录 字体强调 背景色: 代码 1.行内代码 2.多行代码 表格 使用LaTex 插入数学公式 排版方式 常用西文符号 上标与下标 括号 运算 常用公式 生成目录 推荐工具 Typora最常用快捷键 字体强调 Markdown 预览 *倾斜* 倾斜 **粗体** 粗体 ~~删除线~~ 删除线的~符号一般位于键盘左上角位置。 删除线 > 引用 引用 字体...

琦彦 7万+

anaconda navigator 卡在loading application界面一直没有反应解决办法

在打开anaconda navigator 程序的时候,遇到了2个问题。第一个问题:打开的时候弹出提示:There is an instance of Anaconda Navigator already running.第二个问题:程序一直卡在loading application界面一直没有反应。以下是我的解决办法,有效果。

猿小白的博客 4384

设计模式 七大原则,UML类图

设计模式 七大原则 一、简述   设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。问题(problem) --》解决方案(solution) --》效果(consequences),从而总结出一个设计模式,后人参考该模式以期望避免出现类似问题,并达到某种效果。 二、设计模式七大原则 原则名称 解释 开闭...

Genven_Liang的博客 580

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大白话谈设计模式常用七大原则

前言 本文基于我个人在日常开发过程中对于设计模式的使用,以通俗易懂的表达方式分享我对设计模式七大原则的看法。 个人认为在看Spring源码,或者其他项目源码之前,最好了解一下设计模式,不管是新手还是老手,都有必要学习Java设计模式。拿Spring来说,Spring将设计模式运用得淋漓尽致,比如IOC容器就用了单例模式、工厂模式等,Spring MVC的DispatchServlet采用了委派模式(虽然不是23中的一种)、适配器模式、责任链模式等。看过之后才知道,Spring的代码质量真的高,人家牛逼是有原

qq_24406773的博客 294

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

一文让你读懂“设计模式七大原则之——单一职责原则”

上一个轮的加班刚刚完结还没一周,领导就跑来告诉我:“小菜鸟,周末跟加班才更般配哟!”可怜的孩子又迎来了新的加急任务,美好的加班生活又要开始喽。 不!这不是菜鸟想要的生活,菜鸟要反抗,菜鸟决定了,要辞职。这不偷偷拿出手机登录各大招聘网站进行了浏览,突然发现怎么招聘还要求会设计模式呢?为此赶紧拿出那早已沾满灰尘的资料进行恶补。哎!在这之前还是扶我起来加班吧。 以上内容纯属虚构(除了加班),如有雷同请看下文。 今天让我们一起学习一下设计模式七大原则之——单一职责原则。 基本概念 拿java的类来说单一职责原

first_M的博客 352

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一文读懂设计模式

设计模式分为三大类创建型(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型(7):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式行为型(11):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式设计模式的七大原则单一职责原则:一个类只作用于一种处理接口隔离原则:最小实现原则。

优快云博客技术,java高级工程师,业务层架构师,高级管理认证,毕业设计可以联系我 900

设计模式原则、特性一篇全!

本文持续修改中!是学习尚硅谷韩顺平老师视频后做的笔记,有兴趣的同学可以在去b站搜索学习! 文章目录设计模式存在意义:概念:五大特性:1、代码重用性2、可读性3、可扩展性4、可靠性5、使程序显示出高内聚、低耦合的特性设计模式七大原则:1、单一职责原则:基本思路代码示范:2、接口隔离原则:代码演示:3、依赖倒置原则基本思路:代码演示4、里氏替换原则(OCP)基本思路:代码演示5、开闭原则基本思路:代码演示:6、迪米特法则基本思路代码演示7、合成复用原则: 设计模式 存在意义: 相信很多人都有这样的经验: 在项

Nimrod__的博客 296

设计模式之SOLID原则

介绍 设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。前辈们总结出来的,遵循五大原则可以使程序解决紧耦合,更加健壮。 SRP 单一责任原则 OCP 开放封闭原则 LSP ...

Ariel_欢 2284

一分钟带你了解Java设计模式的七个设计原则

设计模式(Design Pattern)是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用性代码,让代码更容易被他人理解,保证代码可靠性。 七个设计原则: 面向对象编程有七大原则,即经常提到的Design Pattern,提倡它的根本原因是为了代码复用,增加可维护性。设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。因为设计...

kxkxyzyz的博客 229

一张图让你读懂什么是设计模式 --设计模式系列总结

设计模式 创建型 单例模式 工厂模式 原型模式 建造者模式 结构型 桥接模式 适配器模式 外观模式 装饰器模式 代理模式 享元模式 组合模式 行为型 模板方法模式 命令模式 访问者模式 迭代器模式 观察者模式 中介者模式 忘备录模式 解释器 状态模式 策略模式 职责链模式 此为思想角度剖析设计模式 若想从代码角度剖析 可以去看往期帖子 ...

weixin_42557255的博客 430

一篇文章带你读懂设计模式!(内附代码)

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

qq_59567619的博客 646

0、目标精通--用java写设计模式:简单理解设计模式

文章目录java设计模式简单理解设计模式的目的七大设计原则下一章:单一职责原则ps: 不知道能不能坚持更新~~~~~ java设计模式简单理解 设计模式的目的 在编写代码中,我们常常只为了完成某项功能而编写业务代码,只在乎代码是否能跑通。至于其扩展性、健壮性、重用性、灵活性等却几乎不在考虑范围之中。所以每当需求修改,或某些地方要做出变动的时候,就变得特别麻烦。经常会出现修改一个地方,导致其他地方出现bug。这仅仅是举例说明的其中一种情况,灵活的使用设计模式,就能避免这些问题。 代码重用性(相同的代码,不需

small_clear的博客 172

全面了解23种设计模式,细说那些被人所知的设计思想。(一周彻底撸完被23种设计模式疯狂折磨)

一,23种设计模式分为三大类别模式 : 1,创建型模式: 它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产。 2,结构型模式: 它的主要特点是 如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原

Crazy_Cw的博客 2404

大白话讲Java七大设计原则通俗易懂

最近在学习Spring源码,发现一个框架的设计里充斥了各种设计原则与设计模式,和优秀的面向对象思想。我想如果问每一个学Java的人知道什么是面向对象吗,我觉得几乎所有人都会说知道,但是真正理解面向对象的人凤毛麟角。我们所理解的面向对象不过是冰山一角,这才是Java的魅力所在,也是我为之痴迷的原因。 最近看到一个很有意思的说法:Java有七大心法,23种武功招式。 分别就是Java的七大设计原则和常用的23种设计模式了。掌握这些有助于我们读懂框架源码,也会帮助我们在工作中写出更加规范的代码。 网上的设.

weixin_46214451的博客 1589

【大话设计模式】全局把握篇

告别了UML后,就迎来了大话设计模式,在之前看到师姐经常抱着这本书穿梭在511和501和四楼,师姐对这本书的重视可以用四个字来形容:如视珍宝,原来还比较好奇师姐总是拿着小人儿书干嘛啊,现在终于明白了,我小心翼翼的翻开设计模式,认认真真的看着每一个设计模式。不乏也读懂了点什么,现在和大家分享一下。      《简介》        设计模式不是一本小人书儿,不是一本程序书,而是通过故事讲述成熟如

致力于成为顶尖的架构师 5260
上一篇: Windows安装Mysql(图文解说详细版,无msi版本)
下一篇: 我终于读懂了单例模式。。。
掉头发的王富贵
掉头发的王富贵 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄7年 5万+粉丝 336原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掉头发的王富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值