面向对象设计的SOLID原则

2023-11-08

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。

SRP The Single Responsibility Principle  单一责任原则
OCP The Open Closed Principle  开放封闭原则
LSP The Liskov Substitution Principle 里氏替换原则
DIP The Dependency Inversion Principle 依赖倒置原则
ISP The Interface Segregation Principle 接口分离原则

Steve Smith在5月份的微软TechED 2009上有个SOLIDify Your ASP.NET MVC的讲座, derick.baileySOLID Development Principles – In Motivational Pictures很好的解释了SOLID原则。

单一责任原则: 
当需要修改某个类的时候原因有且只有一个(THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE)。换句话说就是让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。 
 SingleResponsibilityPrinciple2_71060858


开放封闭原则 
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。这个原则是诸多面向对象编程原则中最抽象、最难理解的一个。

OpenClosedPrinciple2_2C596E17 

里氏替换原则 
当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系 
LiskovSubtitutionPrinciple_52BB5162  
依赖倒置原则
1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象 
2. 抽象不应该依赖于细节,细节应该依赖于抽象 
DependencyInversionPrinciple_0278F9E2


接口分离原则 
不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。 

InterfaceSegregationPrinciple_60216468

这几条原则是非常基础而且重要的面向对象设计原则。正是由于这些原则的基础性,理解、融汇贯通这些原则需要不少的经验和知识的积累。上述的图片很好的注释了这几条原则。

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

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

  • java本地时间格式不带年份

    我喜欢将本地时间格式格式化为不带年份的字符串 目前我可以显示包含年份的本地格式 java text DateFormat df java text DateFormat getDateInstance java text DateForma
  • 如何调试使用maven构建的android应用程序

    我目前正在尝试从 Eclipse 调试我的设备上的 Android 应用程序 设备已添加 我可以在控制台和 Eclipse 中看到它 控制台 Windows adb devices List of devices attached 0019
  • Java如何删除设置了IMMUTABLE位的文件

    正在开发一个 Java 8 项目 我从外部源复制文件 在这些源之一中 文件设置了不可变位标志 In OSX这是这样设置的 sudo chflags schg path to file In Linux chattr i path to fi
  • Junit Mockito 测试一切

    我现在正在寻找更多时间但没有结果 请帮忙 这是我要测试的课程 public class DBSelectSchema extends Database private static final Logger LOG Logger getLo
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 使用 google-api-java-client 的 2 足 OAuth

    有谁知道如何将 2 legged OAuth 与 google api java client 一起使用 我正在尝试访问 Google Apps 配置 API 以获取特定域的用户列表 以下不起作用 HttpTransport transpo
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 如何避免 Java 中的忙旋转

    我有一个多线程应用程序 其中一个线程向另一个线程发送消息 等待线程轮询消息并做出反应 处理锁 像这样 等待线程代码 while true if helloArrived System out println Got hello if bye
  • 在 SWT 中单击鼠标触发事件?

    在SWT中 对于MouseListener接口 可用的方法有mouseUp mouseDown and mouseDoubleClick 如何根据用户点击触发事件 我们可以通过结合来做到这一点mouseUp and mouseDown 但没
  • FXML 文件中的 getHostServices().showDocument()

    有没有简单的方法可以将 getHostServices showDocument 命令放入 toHomepage 方法中 而不是执行一行又一行的代码 这样代码应该看起来干净简单 package sample import javafx ap
  • 解密 TLS 1.2 AES-GCM 数据包

    我正在开发一个 Java 程序来解密TLS 1 2正在使用的会话TLS RSA WITH AES 128 GCM SHA256密码 我使用wireshark 录制了一个测试会话 这大师秘密是已知的 No Time Protocol Leng
  • 在 JavaFX 中更改 ListView 字体大小

    我想知道如何更改 JavaFx 中的列表视图项目文本字体大小 每行文本的大小会有所不同 我尝试使用细胞因子属性 但我不知道如何使用它 有人可以帮我吗 类似的问题在这里 如何更改JavaFX中ListView的字体大小 https stack
  • iText7 将 SVG 添加到 PdfDocument 中以及可能出现的问题

    关于问题的答案 如何使用 iText7 将 SVG 添加到 PDF 这是一个链接点击这里 https stackoverflow com questions 50059456 how to add an svg to a pdf using
  • Java XML 解析器添加不必要的 xmlns 和 xml:space 属性

    我在 Windows 10 上使用 Java 11 AdoptOpenJDK 11 0 5 2019 10 15 我正在解析一些旧版 XHTML 1 1 文件 这些文件采用以下一般形式
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • Java 应用程序启动,ProcessBuilder 一段时间后被阻止

    我正在开发一个 Java 桌面应用程序 我们称之为控制台 包含 3 个按钮 其中两个启动 Win32 应用程序 第三个应该启动一个可执行的 jar ProcessBuilder pb new ProcessBuilder java jar
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static
  • 在没有 ODBC 的情况下从 Java 操作 Access 数据库

    我想从我的 Java 项目操作 Microsoft Access 数据库 accdb 或 mdb 文件 我不想使用 Microsoft 的 JDBC ODBC Bridge 和 Access ODBC 驱动程序 因为 JDBC ODBC 桥

随机推荐

  • 100天精通Python(基础篇)——第5天:数据类型转换

    文章目录 一 字符串 整数 浮点数类型转换的语句 二 数字转字符串 三 字符串转数字 四 整数和浮点数互转 一 字符串 整数 浮点数类型转换的语句 二 数字转字符串 num str str 11 print type num str num
  • mysql下载 补丁_mysql 官方补丁在哪里下载?

    MySQL 64位安装图解 解压缩后运行程序开始安装 选择接受协议 点击下一步 选择developer default 点击 next 检查是否满足安装需求 点击 Execute 按钮后 可能会下载一些程序 到时你自己点击安装就行了 直到所
  • 区块链架构-fabric集群版安装(centos7版本)

    书接上回 配置多机器多节点集群模式 服务器选择说明 暂不考虑高可用 也不考虑kafka 所以先使用三台机器 3M 3台服务器 1O 1 Order 2P 2 Org2Peer 3 1 2证书加密 证书与加密暂时不采用CA 直接使用官方提供的
  • Ai实现FPS游戏自动瞄准 yolov5fps自瞄

    大家好 我是毕加锁 锁 今天来分享一个Yolov5 FPS跟枪的源码解析和原理讲解 代码比较粗糙 各位有什么优化的方式可以留言指出 可以一起交流学习 需要了解的东西和可能会遇到的问题1 xy坐标点与当前鼠标的xy坐标点距离计算 2 获取窗口
  • 两个串口之间传输文件

    一 串口连接 将两个USB TO TTL用两根杜邦线连接 将两个USB TO TTL的RX TX引脚交叉连接 然后将两个USB TO TTL接口接在电脑上 二 传输文件 1 打开两个串口助手 波特率是115200 数据位8 停止位1 无校验
  • el-table合并列&同时在分页时不被割裂开

    核心思想 合并大表格 留出空间给到slot 插槽 在插槽内使用小表格 效果图 具体实现
  • 学生信息管理系统中遇到的一些问题

    学生信息管理系统虽然已经让师父验收了 但感觉还是有很多不足之处 主要是全心全意为客户服务的宗旨有好多地方没有注意到 除了光标的默认输入位置 修改密码时自动默认输入并选中旧密码 师父还提醒我把所有的有关信息的增 删 改 查的窗体都要设为主窗体
  • 访谈,智能座舱开发中的人机交互与人机工程布置

    Mixlab无界社区 跨学科 智能座舱 HCI 前沿知识 N1 智能座舱开发中的人机交互与人机工程布置 丰田部分车型的多媒体系统上的Apple CarPlay 今天是汽车HMI设计师 我最喜欢苹果的UI啦 IOS的UI风格 meta sha
  • Nacos 快速上手

    Nacos 快速上手 文章目录 Nacos 快速上手 准备工作 部署 Spring Boot 集成 配置说明 Spring Cloud Nacos Dubbo Nacos 公共 API 包 服务提供者 服务消费者 问题 微服务现在越来火 有
  • php奇偶数怎么求,php奇偶数循环

    根据表单提交的数据用户在浏览器生成图一示例的图形 图形参数说明 大小 图形中最长那一行的字符数 奇数行 偶数行 最长那一个行为奇数行 紧邻的两行算偶数行 以此类推 案例效果图 应用了for循环 还应用了一个php函数 str repeat
  • 初级算法-12-实现 strStr()

    描述 实现 strStr 函数 给你两个字符串 haystack 和 needle 请你在 haystack 字符串中找出 needle 字符串出现的第一个位置 下标从 0 开始 如果不存在 则返回 1 说明 当 needle 是空字符串时
  • Android Context 上下文 你必须知道的一切

    转载请标明出处 http blog csdn net lmj623565791 article details 40481055 本文出自 张鸿洋的博客 本文大多数内容翻译自 http www doubleencore com 2013 0
  • maven(四):一个基本maven项目的pom.xml配置

    继续之前创建的test项目 一个基本项目的pom xml文件 通常至少有三个部分 第一部分 项目坐标 信息描述等
  • Python爬虫从入门到精通:(27)scrapy框架04_scrapy数据解析_Python涛哥

    scrapy数据解析 这节课 我们来看下scrapy中的数据解析 创建工程 爬取内容 爬取段子网中的段子 https duanzixing com 段子 回顾上节课所学的知识 创建scrapy 我们先来创建工程和爬虫文件 1 scrapy
  • asp.net 根据url获取参数值

    以下是 根据url获取参数值 Uri myUri new Uri http 10 0 0 75 7003 SitePages t1 aspx CurrentFolder http 10 0 0 75 7003 test docs 人力资源部
  • 实现基于SSL的主从复制

    准备 两台主机 1 在主服务器上生成证书 mkdir etc my cnf d ssl cd etc my cnf d ssl openssl genrsa 2048 gt cakey pem openssl req new x509 ke
  • Web安全之中间件安全

    中间件 中间件 英语 Middleware 又译中间件 中介层 是一类提供系统软件和应用软件之间连接 便于软件各部件之间的沟通的软件 应用软件可以借助中间件在不同的技术架构之间共享信息与资源 中间件位于客户机服务器的操作系统之上 管理着计算
  • Conda安装及使用手册

    Conda 是一个开源的软件包管理系统和环境管理系统 用于安装和管理多个软件包及其依赖项 它可以帮助用户创建虚拟环境 使得不同的项目可以使用不同的软件包和版本 从而避免版本冲突和不兼容性问题 下面是 Conda 的安装和使用步骤 安装 Co
  • 鳄鱼笔记(一) --> C#_入门<--[认识C#]

    c 语言和特点 c 语言及其特点 一 特性 二 认识 net Framework net core 三 个人理解 End c 语言及其特点 一 特性 c 是微软发布的 运行于 net Framework 和 net core 之上的高级语言
  • 面向对象设计的SOLID原则

    S O L I D是面向对象设计和编程 OOD OOP 中几个重要编码原则 Programming Priciple 的首字母缩写 SRP The Single Responsibility Principle 单一责任原则 OCP The