java设计原则

1、开闭原则

定义:类,模块,函数对扩展开放对修改关闭。如工厂模式

对扩展开放:模块对扩展开放就意味着,当需求变化时,可以对模块进行扩展,使其满足具有新需求的功能,换句话说就是模块通过扩展的方式满足需求的变化。

2、单一职责原则

定义:只能让一个类/接口/方法有且仅有一个职责

接口职责单一,应该有且仅有一个原因引起类的变更,好处是能降低了类的复杂度、提高类的可读性,提高系统的可维护性、降低变更引起的风险。

3、里氏代换原则

定义:所有引用基类的地方必须能透明地使用其派生类(子类)的对象

子类可以扩展父类的功能,但不能改变父类原有的功能

1.子类必须完全实现父类的抽象方法,不能改变父类原来功能;

2.子类可以有自己的个性(属性和方法);

3.覆盖或实现父类的方法时输入参数可以被放大:子类方法参数可以使用抽象类、父类或者接口。(遵循父类契约设计优选原则)

4、接口隔离原则

定义:建立单一接口,不要建立臃肿庞大的接口

通俗来讲:接口尽量细化,同时接口中的方法尽量少。
备注:如何细化?细化到什么程序?没有统一的标准,应根据业务合理细分,适合业务才是重点。尽量少公布public方法。要高内聚。

5、迪米特法则

定义:一个类应该对自己需要耦合或调用的类知道得最少

通俗来讲,你(被耦合或调用的类)的内部是如何复杂都和我没有关系,那是你的事情,我就调用你提供的public方法,其他一概不关心,能有效降低类之间的耦合性

6、依赖倒置原则

定义:A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
           B. 抽象不应该依赖于细节,细节应该依赖于抽象;
           C.针对接口编程,不要针对实现编程。

精简的定义: 面向接口编程。
Test-Driven Development 测试驱动开发是依赖倒置原则的最好体现。测试驱动开发要求先写测试类,测试通过才写实现类,这就要求你要先想接口定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让我们拯救数学

一, 前言 数学特别是数论面临生死存亡,100年的数论在错误的道路上运行,已经把整个数学颠覆。从挪威数学家v布龙,到意大利数学家邦别里,再到德国数学家法尔廷斯,英国数学家安德鲁怀尔斯,以及中国…

【上海交大】博士生年度进展报告模板

上海交通大学 博士生年度进展报告模板 比较不好找,在交我办中发起申请流程后才能看到链接,链接如下: https://www.gs.sjtu.edu.cn/xzzx/pygl/15

爬取CSDN博文到本地(包含图片,标签等信息)

文章目录 csdnToMD改进将CSDN文章转化为Markdown文档那有什么办法快速得到md文档?例如:获取单个文章markdown获取所有的文章markdown 项目中待解决的问题 csdnToMD 项目原作者:https://gitee.com/liushili888/csdn-is—mark-down 改进后仓库…

vue脚手架 项目打包

目录 01 在脚手架中使用jquery 02 项目的打包 03 ELement UI 框架 01 在脚手架中使用jquery 脚手架中使用jquery的步骤: 1.npm i jquery --save 2.在使用jq的组件里面引入jq 3.import $ from jquery 4.正常使用 02 项目的打包 1.npm run build 项目启动不启动都可以打包 2.…

爬虫补环境,ES6 Class在环境模拟中的应用与优势

相比于使用传统的Object实现补环境框架结构,使用 ES6 的 Class 具有以下优势: 代码维护更方便:Class的语法更简洁直观,方便开发者阅读和维护。组织结构更清晰:Class提供了明确的层次结构,有助于代码的模块…

Z语言学习——基于通讯案例

目录 1数据类型 2初始状态 3 Alice的消息发送 4 Bob接收与发送消息 5 Alice接收消息 6消息的增删改查 6.1 删除消息 6.2查询消息 6.3修改/增加消息 7定理证明——重要目的 案例背景: (1)构建一个交互式的通讯方案; (2)攻击者控制了所有的通讯…

tsf-consul的使用

在腾讯云微服务平台TSF中使用Consul作为服务发现组件,通常需要遵循以下步骤: ### 1. 创建应用 首先,您需要在TSF控制台创建一个应用。在创建应用时,选择合适的业务类型、开发语言、开发框架等信息。对于使用Consul作为服务发现组件的Spring Cloud应用,您需要选择“业务应…

眼见不一定为实之MySQL中的不可见字符

目录 前言 一、问题的由来 1、需求背景 2、数据表结构 二、定位问题 1、初步的问题 2、编码是否有问题 3、依然回到字符本身 三、深入字符本身 1、回归本质 2、数据库解决之道 3、代码层解决 四、总结 前言 在开始今天的博客内容之前,正在看博客的您先来…

Element-UI实现el-dialog弹框拖拽功能

在实际开发中,会发现有些系统,弹框是可以在浏览器的可见区域自由拖拽的,这极大方便用户的操作。但在查看Element-UI中弹框(el-dialog)组件的文档时,发现并未实现这一功能。不过也无须担心,vue中…

在uniapp+vue cli中使用lime-echart图表,关于使用异步数据_lime-echartuniapp

import {TitleComponent,TooltipComponent,GridComponent, DatasetComponent, TransformComponent, LegendComponent } from ‘echarts/components’; // 标签自动布局,全局过渡动画等特性 import {LabelLayout,UniversalTransition} from ‘echarts/features’; //…

59.SQLSERVER中自定义函数的基本使用

1.自定义函数: CREAT FUNCTION [dbo].[GetVisitTypeCode] (VisitTimeAndType VARCHAR(40))RETURNS VARCHAR(2)ASBEGINDECLARE VisitTypeName varchar(10),VisitTypeCode varchar(2),VisitTimeAndType1 VARCHAR(40)IF VisitTimeAndType IS NOT NULLBEGINSET VisitT…

Day 28:2748. 美丽下标对的数目

Leetcode 2748. 美丽下标对的数目 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。 返回…

json的特点

JJSON是一种轻量级的数据交换格式&#xff0c;它基于JavaScript编程语言的一个子集&#xff0c;采用完全独立于语言的文本格式&#xff0c;结构化程度高。 JSON的主要特点包括&#xff1a; 轻量级&#xff1a;JSON的格式紧凑&#xff0c;易于传输和解析。 结构化&#xff1a;…

Linux系统之ARP命令的基本使用

Linux系统之ARP命令的基本使用 一、ARP介绍二、ARP命令帮助2.1 ARP的help帮助信息2.2 ARP命令的帮助解释 三、ARP命令的基本使用3.1 查看ARP缓存3.2 显示详细信息3.3 添加静态arp映射3.4 删除指定主机的ARP条目3.5 从文件读取并添加条目3.6 清除ARP缓存 四、注意事项五、总结 一…

wins系统资源监视器任务管理器运行监控CPU、内存、磁盘、网络运行状态

目录 1.Windows系统资源监视器的详细介绍2.通过任务管理器打开资源监视器3.任务管理中总体观察观察cpu、pid、应用程序、I/O次数或者说读写字节数 4.观察CPU观察cpu核心数&#xff0c;以及哪些占用cpu频率过高 5.观察内存观察各个应用占用的内存大小和对应线程 6.观察磁盘活动观…

【前端技巧】css篇

利用counter实现计数器 counter-reset&#xff1a;为计数器设置名称&#xff0c;语法如下&#xff1a; counter-rese: <idntifier><integer>第一个参数为变量名称&#xff0c;第二个参数为初始值&#xff0c;默认为0 counter-increment&#xff1a;设置计数器增…

LabVIEW与3D相机开发高精度表面检测系统

使用LabVIEW与3D相机开发一个高精度表面检测系统。该系统能够实时获取三维图像&#xff0c;进行精细的表面分析&#xff0c;广泛应用于工业质量控制、自动化检测和科学研究等领域。通过真实案例&#xff0c;展示开发过程中的关键步骤、挑战及解决方案&#xff0c;确保系统的高性…

宕机了, redis如何保证数据不丢?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

【Linux从入门到放弃】进程地址空间

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《Linux从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 进…

如何更换OpenHarmony SDK API 10

OpenHarmony社区已经发布OpenHarmony SDK API 10 beta版本&#xff0c;有些 Sample案例 也有需要API10。那么如何替换使用新的OpenHarmony SDK API 10呢&#xff1f;本文做个记录。 1、如何获取OpenHarmony SDK 1.1 每日构建流水线 可以从OpenHarmony每日构建站点获取最新的…