浅谈设计原则

2023-11-18

1单一职责原则

        什么是单一职责原则,在我理解看来就是一个东西如果发生问题那么就有且仅有一个原因导致它发生问题。它的准确解释就是,就一个类而言,应该仅有一个引起它变化的原因。

        如果一个类承担的职责过多,就等于耦合度加大,当变化发生时,设计会受到破坏。最好的例子就是将界面和业务进行分离。做设计应该让类只有一个职责。

2开放封闭原则

        它说的是,软件实体(类,模块,函数)应该可以扩展,但是不能进行修改。对于扩展是开放的,对于修改来言是封闭的。开发人员对程序的改动应该是增加代码而进行的,而不是修改代码。

3依赖倒转原则

        高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程。依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。

4里氏代换原则

        一个软件实体使用的是它的父类的话,那么也一定适用于子类,也就是说把父类全部换为子类,程序行为没有变化。

Animal animal = new cat();
animal.eat();
animal.drink();
animal.run();
animal.sleep();

//当需要其他动物来执行行为,只需要更换掉cat

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

浅谈设计原则 的相关文章

  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • 无法在 Intellij 中运行主类[重复]

    这个问题在这里已经有答案了 我有以下项目结构 ProjectRoot src Main examples libs My src文件夹被标记为sources在 Intellij 中 现在 当我想运行 Main 类时 出现以下错误 Excep
  • 如何杀死 Java Future?

    我正在开发的服务使用 Future 来并行运行多个任务 每个任务最多可能需要一分钟才能完成 然而 外部库似乎有问题 因为在某些情况下 2 的时间 它不会返回 在这些情况下 我想给出 2 分钟的等待时间 如果还没有返回 我想杀死 future
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • 我的 Kafka 流应用程序刚刚退出,代码为 0,什么也不做

    为了尝试 Kafka 流 我这样做了 public static void main String args final StreamsBuilder builder new StreamsBuilder final Properties
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • 在约束验证器中使用 Guice 进行依赖注入

    我有一个在 ConstraintValidator 的实现中注入类的用例 我正在使用 Google guice 进行依赖项注入 目前无法在验证器内注入 我的场景的简化形式 内部模块 Provides Singleton public Ser
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • Java 8:如何创建毫秒、微秒或纳秒的 DateTimeFormatter?

    我需要创建格式化程序来解析具有可选的毫秒 微米或纳秒分数的时间戳 例如 对于我的需求 我看到以下机会 DateTimeFormatter formatter new DateTimeFormatterBuilder append DateT
  • 添加 char 和 int

    据我了解 字符是一个字符 即一个字母 一个digit 标点符号 制表符 空格或类似的东西 因此 当我这样做时 char c 1 System out println c 输出 1 正是我所期望的 那么为什么当我这样做时 int a 1 ch
  • log4j.properties 在 Wildfly 上无法正常工作

    我的类路径中有一个 log4j properties 文件 它位于 APP XX jar log4j properties 位置 我注意到在ear文件中我还可以在lib文件夹中找到log4j 1 2 17 jar 但无论我在 log4j p
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • FetchType.LAZY 不适用于休眠中的 @ManyToOne 映射

    简而言之 我的 Child 类与 Parent 类之间存在多对一的关系 我想加载所有的孩子 而不必加载他们的父母详细信息 我的孩子班级是 Entity public class Child implements Serializable I
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca

随机推荐

  • 读研期间小论文投稿-个人总结

    我是2014级研究生 学校只是一个普通211 而且工科很弱 导师对我是放养 让我回忆下 上学期就见过她一次 而且她快退休了 没项目没经费没权利 但我觉得跟着她还挺好 因为我可以自己研究自己喜欢的 没人妨碍 但同时导师没有基金 所以我的小论文
  • 两个linux服务器间复制文件

    scp是secure copy的简写 用于在Linux下进行远程拷贝文件的命令 和它类似的命令有cp 不过cp只是在本机进行拷贝不能跨服务器 1 命令格式 scp 参数 原路径 目标路径 2 命令实例 从本地服务器复制到远程服务器 1 复制
  • Vue使用Swiper看这一篇就够了

    Vue使用Swiper看这一篇就够了 此案例实现需求 完成swiper动态异步数据下的slide渲染 自定义分页器样式 解决loop true设置时的事件丢失问题 swiper鼠标移入 移出 暂停 开始轮播 单页面渲染多个swiper组件互
  • 什么是区块链概念

    区块链到底有什么价值 区块链技术被称为价值互联网 大体上原因在于它解决了原有互联网的三个基本问题 第一 区块链通过在数字货币领域的应用 提供了资金流 或者叫资本流 信息在互联网的流动的解决方案 第二 区块链通过加密和分布式账本的引用 解决了
  • 关于Visual Studio 不支持x64 内联汇编分析

    记录一下今天的大坑 实在是有必要记录一下 调程序发现参数在函数传递时 出现了异常的值 已经确认不是指针破坏的问题 用汇编看了下 发现汇编寄存器地址都取错了 在release开启o2优化时出现 关掉又正常 实在是百思不得其解 对于内联汇编 其
  • Mysql根据拼音首字母分组和排序

    最近业务上有个需求 需要根据英文字母展示对应的人名 和我们手机的通讯录差不多 如下图所示 通常如果表设计的时候增加了对应的首字母字段应该很好实现 那如果没加 应该怎么实现呢 图示Sql SELECT name ELT INTERVAL CO
  • Java FileOutputStream类

    文章目录 总结 FileOutputStream类数据结构 FileOutputStream类方法 构造方法 操作方法 总结 FileOutputStream类用于将数据写入文件或文件描述符的输出流 FileOutputStream用于写入
  • 如何查看局域网内所有IP

    要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤 第一步 点击电脑左下角的 开始 然后再点击 运行 第二步 在运行窗口里填入 cmd 然后点击确定 第三步 在cmd命令窗口输入 ipconfig ALL 命令 点击键盘上的回车键 第
  • 2021年字节跳动+京东+美团面试总结!内含福利

    开篇 说一下我大概的情况 渣本毕业 工作已经有快3年了 从高中就开始玩小破站 无论是学习还是日常放松都是在b站 大学主学的软件技术专业 所以 入职bilibili是我大学时期给自己定的小目标 在学校 专业学的算中上的水平 课本知识和老师讲的
  • delphi with do和for do语句

    1 with 对象名 do语句只是为了减少输入的字符 不必每次重复名字 直接写变量 procedure TForm1 Button1Click Sender TObject 正常写法beginedit1 text hello edit1 c
  • J1939协议与CAN2.0对应关系

  • python贪吃蛇小游戏,面向对象设计模式,附带源码以及所需素材

    在python中通过面向对象设计模式来实现一个贪吃蛇小游戏 源码在最下方 上传的资源包内也包括代码源文件以及所需素材等 源文件在game文件夹内 exe文件可直接运行 pygame模块需要自行下载 先来看运行效果图 开始界面 点击按钮开始游
  • Leetcode 括号的分数 -- 栈

    题目描述 leetcode 856 括号的分数 给定一个平衡括号字符串 S 按下述规则计算该字符串的分数 得 1 分 AB 得 A B 分 其中 A 和 B 是平衡括号字符串 A 得 2 A 分 其中 A 是平衡括号字符串 示例 1 输入
  • Go语言学习18-基准测试

    基准测试 引言 基准测试 1 编写基准测试函数 2 计时器 3 内存分配统计 4 基准测试的运行 结语 引言 所谓基准测试 Benchmark Test 简称BMT 是指 通过一些科学的手段实现对一类测试对象的某项性能指标进行可测量 可重复
  • 嵌入式 Linux 入门(七、Linux 下的环境变量)

    嵌入式 Linux 入门第七课 学习理解 linux 的环境变量 矜辰所致 前言 学习完 Linux 的 Shell 命令 和 Shell 脚本 我们还需要理解一个东西 环境变量 理解了 Linux 的环境变量 前面的文章中有些细节的东西
  • OpenCASCADE:使用C#演示的实例

    OpenCASCADE 使用C 演示的实例 OpenCASCADE是一个开源的三维几何建模软件库 它支持多种语言接口 其中 OCCT是OpenCASCADE的C 语言封装 而在本文中 我们将介绍如何使用C 语言来调用OCCT的API 在Vi
  • Mac安装SecureCRT

    踩了很多坑 主要过程 第一次 在之前常用的一个mac软件福利网站https xclient info s securecrt html下载之后发现没有破解文件securecrt mac crack pl 第二次 在csdn上模仿下载之后进行
  • SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

    场景 设计模式 策略模式在Java中的使用示例 设计模式 策略模式在Java中的使用示例 java 策略模式示例 霸道流氓气质的博客 CSDN博客 上面讲了策略模式在Java中的使用示例 下面看一个在SpringBoot中的实际使用示例 业
  • 实时监听EditText内容变化,修改监听软键盘

    主要是addTextChangedListener方法的使用 aswerEdittext addTextChangedListener new TextWatcher 编辑框的内容发生改变之前的回调方法 Override public vo
  • 浅谈设计原则

    1单一职责原则 什么是单一职责原则 在我理解看来就是一个东西如果发生问题那么就有且仅有一个原因导致它发生问题 它的准确解释就是 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于耦合度加大 当变化发生时 设计会受到