面向对象设计的重要原则:SOLID

2023-11-13

SOLID是面向对象设计5大重要原则的首字母缩写:
1、单一职责原则(SRP)
2、开放封闭原则(OCP)
3、里氏替换原则(LSP)
4、接口隔离原则(ISP)
5、依赖倒置原则(DIP)

下面具体解释一下每个原则:
1、单一职责原则(SRP)
表明一个类只有一个职责,一个类就像容器一样。它能添加任意数量的属性、方法等。然而,如果你试图让一个类实现太多,很快这个类就会变得笨重,任意小的改变都会让这个单一类的变化。当你改了这个类,为了不对现有系统造成影响,不得不重新测试甚至解决由此带来的bug。SRP原则的核心是将整个问题分割成多个更小的部分,当某个小部分需要改变时,需要重新测试验证的也只有很小的一部分。

2、开放封闭原则(OCP)
表明一个类应该对外扩展开放,对修改关闭,这意味着一旦创建了一个类并且应用程序的其他部分开始使用它,而不应该修改它,因为很可能你的改变会引发系统的崩溃。如果需要一些额外功能,应该扩展这个类而不是修改它。使用这种方式,现有系统不会看到任何新变化的影响。同时,只需要测试新创建的类。

3、里氏替换原则(LSP)
表明派生的子类应该可替换基类,也就是说任何基类可以出现的地方,子类一定可以出现。值得注意的是,当你通过基础实现多态行为时,如果派生类没有遵守LSP,可能会让系统引发异常。所以谨慎使用继承,只有确定是“is-a“的关系时才使用继承。

4、接口隔离原则(ISP)
表明类不应该被强迫依赖他们不使用的方法,也就是说一个接口应该拥有尽可能少的行为,它是精简的,也是单一的。

5、依赖倒置原则(DIP)
表明高层模块不应该依赖低层模块,相反,他们应该依赖抽象类或者接口。这意味着不应该在高层模块中使用具体的低层模块。因为这样的华,高层模块变得紧耦合低层模块。这样的话,如果修改了低层模块,那么高层模块也会被修改。根据DIP原则,高层模块应该依赖抽象(以抽象类或者接口的形式),低层模块也是如此。通过面向接口(抽象类)编程,紧耦合被移除

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象设计的重要原则:SOLID 的相关文章

  • 面向对象设计原则

    面向对象设计原则是设计模式的基础 xff0c 每一个设计模式都符合某一个或者多个面向对象设计原则 xff0c 面向对象设计原则是用于评价一个设计模式的使用效果的重要指标之一 单一职责原则 一个对象应该只包含单一的职责 xff0c 并且该职责
  • 里氏替换原则——面向对象设计原则

    在上一节 开闭原则 中 xff0c 我们详细介绍了开闭原则 xff0c 本节我们来介绍里式替换原则 里氏替换原则的定义 里氏替换原则 xff08 Liskov Substitution Principle xff0c LSP xff09 由
  • 依赖倒置原则——面向对象设计原则

    前两节我们详细介绍了面向对象设计原则中的开闭原则和里氏替换原则 xff0c 在本节中我们来介绍依赖倒置原则 依赖倒置原则的定义 依赖倒置原则 xff08 Dependence Inversion Principle xff0c DIP xf
  • Solid Compression

    定义 Solid Compression是一种多文件的数据压缩方式 xff0c 其中所有未被压缩的文件是一个整体 xff0c 视为一个独立的data block 这样的文件称为solid archive 7z RAR压缩格式和tar bas
  • 网络部分问题

    HTTP协议 端口80 工作在应用层 不安全 不需要加密不需要证书 URL以http开头 请求包 请求行 请求头标 空行 请求数据 请求行由 请求方法 请求的URL HTTP版本构成 请求方法 get post head put optio
  • 数据链路层简介

    1 数据链路层的基本概念 数据链路层在物理层提供服务的基础上向网络层提供服务 其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层 其主要作用是加强物理层传输原始比特流的功能 将物理层提供的可能出错的物理连接改造成为逻辑上
  • 软件开发人员应有的思维方式

    在我很小的时候 曾梦想着哪一天能成为世界知名人士 能够为这个社会贡献自己的力量 曾看到黑白电视机上有关对计算机的强大功能的介绍 那时的我心中已点燃了致力于计算机应用事业的火花 虽然计算机在当时中国的农村还只是一个传说 高中毕业 我义无反顾地
  • PPTP、L2F、L2TP协议

    PPTP协议简介 PPTP Point to Point Tunneling Protocol 即点对点隧道协议 该协议是在PPP协议的基础上开发的一种新的增强型安全协议 支持多协议虚拟专用网 VPN 可以通过密码验证协议 PAP 可扩展认
  • Spring的生态圈、Spring全家桶

    Springboot是伴随spring4诞生的 除了springboot之外 spring作为企业级应用开发的轻量级解决方案提供了许多子项目 这些子项目可以更好地理解其设计架构 思想并使用spring spring的整个生态系统包括以下内容
  • 渗透相关问题(二)

    1 报错注入原理是什么 由于后台没有对数据库的信息做过滤 会输出到前台显示 那么我们就可以利用制造报错函数 将查询语句带入到数据库中 以报错信息显示出来 一般是不以网页标签和xpath的路径格式来制造报错 2 常用哪些函数来制造报错 ext
  • 架构设计核心理念

    文章目录 一 架构设计核心原则 二 架构设计的复杂性 2 1 高性能 2 2 高可用 2 3 可扩展 2 4 低成本 2 5 安全 2 6 规模 一 架构设计核心原则 架构设计的主要目的是为了解决软件系统复杂度带来的问题 架构设计三原则 合
  • 面向对象设计原则——单一职责原则

    单一职责原则是最简单的面向对象设计原则 它用于控制类的粒度大小 单一职责原则 Single Responsibility Principle SRP 一个类只负责一个功能领域中的相应职责 或者可以定义为 就一个类而言 应该只有一个引起它变化
  • C语言基础(底层、运算符)

    一 C语言底层 程序 算法 数据 1 整型 字符类型 字符常量 a 一个字符 字符串常量 abcd 多个字符 字符变量 1 定义字符 有无符号 类型 变量 2 引用变量 引用变量的内容 2 浮点型 1 浮点型常量 十进制 3 14 科学表示
  • 面向对象设计的重要原则:SOLID

    SOLID是面向对象设计5大重要原则的首字母缩写 1 单一职责原则 SRP 2 开放封闭原则 OCP 3 里氏替换原则 LSP 4 接口隔离原则 ISP 5 依赖倒置原则 DIP 下面具体解释一下每个原则 1 单一职责原则 SRP 表明一个
  • 概率论之 -- 边缘分布

    边缘分布 Marginal Distribution 指在概率论和统计学的多维随机变量中 只包含其中部分变量的概率分布 中文名 边缘分布 外文名 marginal distribution 又 名 边际分布 应用学科 概率论 统计学 定义
  • 面向对象设计原则——接口隔离原则

    接口隔离原则 Interface Segregation Principle ISP 使用多个专门的接口 而不使用单一的总接口 即客户端不应该依赖那些它不需要的接口 根据接口隔离原则 当一个接口太大时 我们需要将它分割成一些更细小的接口 使
  • 权衡问题---学习了微服务各大常用组件的一点思考

    1 没有什么技术可以完全通用 只要深度使用一定需要从业务出发对技术进行权衡 从几个例子出发 1 ES的分片机制天生支持分布式 同时也带来了分布式了弊端 排序和算分问题 搜索的场景需要严格的定制化 通过对mapping的修改可以支持算分的调整
  • 面向对象设计原则——开闭原则

    开闭原则是面向对象的可复用设计的第一块基石 它是最重要的面向对象设计原则 开闭原则由Bertrand Meyer于1988年提出 定义 开闭原则 Open Closed Principle OCP 一个软件实体应当对扩展开放 对修改关闭 即
  • 渗透相关问题(3)

    1 sql注入绕过的方法 注释符号绕过 大小写绕过 内联注释绕过 双写关键字绕过 特殊编码绕过 宽字节绕过 2 WAF常用的类型 硬件设备类型 软件产品类型 基于云的WAF 3 sql注入漏洞防御方法 代码层面 对输入进行严格的转义和过滤
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu

随机推荐

  • pclpy有序点云的中值滤波:使用Python进行有序点云滤波

    pclpy有序点云的中值滤波 使用Python进行有序点云滤波 有序点云是一种在三维空间中按顺序存储的点集合 在许多应用中 需要对有序点云进行滤波以去除噪声和异常值 中值滤波是一个常用的方法 它可以有效地去除离群点 并且保持点云的形状不变
  • 寒假小复习4

    冒泡排序 public class Sort public static void main String args double nums 1 66 73 41 30 1 double temp for int i 0 i lt nums
  • 深入springMVC

    HTML 页面中的表单最初所采用 application x www form urlencode 编码方式 并不满足文件上传的需要 所以 RFC 1867 在此基础上增加了新的 multipart form data 编码方式以支持基于表
  • LRU算法(JAVA实现)

    一 算法介绍 最近最久未使用 Least Recently Used LRU 算法是 种缓存淘汰策略 它是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法 该算法的思路是 发生缺页中断时 将最近一段时间内最久未使用的页面置换出去
  • Java static——拾遗

    Java static 拾遗 Java Static 作为修饰符 可以用来修饰变量 方法 代码块 但绝对不能修饰类 1 修饰变量 类的所有对象共同拥有的一个属性 也称为类变量 这类似于C语言中的全局变量 类变量在类加载的时候初始化 而且只被
  • Jenkins添加用户并授权

    添加用户 先选择系统管理1 再在右侧选择2 例如 注意 之后点击保存按钮 如果没有角色先去添加角色 设置完毕一般等待几分钟才可登录查看自己的功能权限 太早登录没任何功能
  • Excel下拉框样式

    1 打开要修改的Excel 选中要修改样式的单元格 2 在上边导航栏中选择 Data 找到 Data Validation 点击下面的 Data Validation 3 在设置中找到 Allow 项 选择 List Source中填写可供
  • 运行mvn -v后出现“cmd 不是内部或外部命令,也不是可运行的程序"

    1 下载maven 官网下载地址 http maven apache org download cgi 2 解压到软件安装目录 比如我解压到E java apache maven 3 5 0 bin apache maven 3 5 0 3
  • mysql中分组取创建时间最新的数据

    近期由于公司数据库升级 遇到了一个问题 以前写的SQL语句查询结果出现了异常 sql实现的功能 将数据以PID进行分组 在组内获取创建时间最新的数据 项目数据比较敏感写了一些测试数据 执行的sql语句 select from select
  • Android中使用jiecaovideoplayer播放视频

    每天学一点2020 5 13 Android 2 Android中使用jiecaovideoplayer播放视频 1 添加依赖 2 添加运行时的权限 3 布局 4 JCVideoPlayer使用 5 设置视频 Android中使用jieca
  • moviepy使用教程

    moviepy使用教程 一 剪辑成果 二 遇到问题 三 moviepy方法分享 一 音频剪辑方法 二 视频剪辑方法 一 剪辑成果 未来 二 遇到问题 尝试使用ffmpeg moviepy pydub 其中pydub主要是对音频的处理 mov
  • @Transactional注解的方法之间调用事务是否生效及其他事务失效场景总结

    对于方法之间调用 注解 Transaction生效以及失效的场景 首先 我们需要知道 Spring是通过代理管理事务的 方法和方法之间的调用分为两种情况 解决办法可在下面列举的不同场景中自取 1 不同类之间的方法调用 如类A的方法a 调用类
  • 三、python基础——六大基本数据类型

    目录 六大标准数据类型 1 数字 Number 不可变 1 1 数值的运算 2 字符串 String 不可变 2 1 介绍 2 2 操作 2 2 1 切片 2 2 2 转义字符 3 列表 List 3 1 介绍 3 2 操作 3 2 1 索
  • 关于CyclicBarrier的一些解释

    我在网上找了一些关于CyclicBarrier的一些解释 In a nutshell just to understand key functional differences between the two public class Co
  • 华为服务器怎么修改启动项,服务器启动项设置方法

    服务器启动项设置方法 内容精选 换一换 如果密码丢失 或创建时未设置密码 推荐您在控制台设置登录密码 有以下几种现象 将制作好的SD卡插入开发者板并上电后 开发者板LED1与LED2灯状态信息异常 将制作好的SD卡插入开发者板 并通过USB
  • std::true_type和std::false_type

    一 认识std true type和std false type std true type和std false type实际上是类型别名 源码如下 template
  • @vue/cli4.5.8搭建项目的坑

    先说下我使用脚手架4 5遇到的问题 使用GUI面板配置项目 脚手架版本4 5 8 安装好Element ui 运行结果如图所示 测试了很多次 还是有问题 最终的解决方案 卸载当前脚手架版本 npm uninstall g vue cli 安
  • 开发项目curl发起https请求,cURL error 60: SSL certificate problem: unable to get local issuer cert提示找不到本地证书错误

    个人开发的时候 在新建的环境 使用curl发起https请求 基本都是错误 需要专门配置 配置完成之后 经常会跟随一个小问题 cURL error 60 SSL certificate problem unable to get local
  • Python3----Numpy总结

    Python Numpy 1 导包 import numpy as np 2 创建一个数组Array 不同于List array1 np array 1 2 3 4 5 数组当中存储相同的数据类型 不同于一般的列表 print array1
  • 面向对象设计的重要原则:SOLID

    SOLID是面向对象设计5大重要原则的首字母缩写 1 单一职责原则 SRP 2 开放封闭原则 OCP 3 里氏替换原则 LSP 4 接口隔离原则 ISP 5 依赖倒置原则 DIP 下面具体解释一下每个原则 1 单一职责原则 SRP 表明一个