Java设计模式的7个设计原则

Java设计模式的7个设计原则是面向对象设计领域中的重要指导方针,它们旨在提高软件系统的可维护性、可扩展性、可复用性和灵活性。以下是这7个设计原则的详细解释:

1. 开闭原则(Open-Closed Principle, OCP)

  • 定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
  • 目的:提高软件系统的可扩展性和可维护性。
  • 应用:使用抽象类和接口来定义系统的框架,然后通过扩展子类或实现接口来实现具体的功能。
  • 示例:通过策略模式实现不同的促销策略,当需要新增促销方式时,只需添加新的策略类,而无需修改现有代码。

2. 里氏替换原则(Liskov Substitution Principle)

  • 定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
  • 目的:确保子类在替换父类时,不会破坏原有程序的正确性。
  • 应用:在继承时,子类尽量不要重写父类的方法,如果必须重写,要保证子类的方法行为与父类一致。
  • 示例:在图形处理系统中,圆形类继承自形状类,圆形类应能完全替代形状类在系统中的任何位置使用,而不会引发错误。

3. 依赖倒置原则(Dependence Inversion Principle)

  • 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
  • 目的:减少模块间的耦合,提高系统的稳定性和可维护性。
  • 应用:在程序中尽量使用接口或抽象类进行变量类型声明、参数类型声明、方法返回类型声明等,而不是直接使用具体类。
  • 示例:在日志记录系统中,定义一个日志接口,然后不同的日志实现类(如文件日志、数据库日志)实现该接口。高层模块通过接口与日志系统交互,而不需要知道具体的日志实现类。

4. 单一职责原则(Single Responsibility Principle, SRP)

  • 定义
    一个类只负责一个功能领域中的相应职责,或者说,就一个类而言,应该只有一个引起它变化的原因。
  • 目的
    降低类的复杂度,提高类的可读性、可维护性,并降低变更引起的风险。
  • 应用
    当发现类的职责过多时,应考虑将其分解为多个类,每个类负责一项职责。
  • 示例:在电商系统中,将订单处理与支付处理分离到不同的类中,每个类只负责一个功能领域。

5. 接口隔离原则(Interface Segregation Principle, ISP)

  • 定义:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
  • 目的:降低类之间的耦合度,提高系统的灵活性和可维护性。
  • 应用:当接口过于庞大时,应将其拆分为多个更小的接口,每个接口只包含一组相关的方法。
  • 示例:在图书管理系统中,将查询接口拆分为学生查询接口和管理员查询接口,每个接口只包含各自需要的方法。

6. 迪米特法则(最少知道原则)(Demeter Principle)

  • 定义:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
  • 目的:降低系统模块间的耦合度,提高系统的可维护性和可扩展性。
  • 应用:在设计系统时,应尽量减少类之间的直接依赖关系,通过接口或抽象类来降低耦合。
  • 示例:在事件驱动的系统中,事件发布者不应直接调用事件订阅者的具体方法,而是通过事件总线来传递事件,降低对象间的耦合度。

7. 合成复用原则(Composite Reuse Principle)

  • 定义:尽量使用合成/聚合的方式,而不是使用继承来复用代码。
  • 目的:减少类之间的耦合度,提高系统的灵活性和可扩展性。
  • 应用:在需要复用代码时,优先考虑使用组合或聚合的方式来实现,而不是通过继承来实现。
  • 示例:在订单系统中,订单类可以包含多个订单项类作为成员,而不是通过继承订单项类来实现。

在这里插入图片描述

这七个设计原则是面向对象设计领域的宝贵财富,它们相互关联、相互补充,共同指导着软件系统的设计和开发。在实际的项目开发中,遵循这些原则可以显著提高软件系统的质量和可维护性。


以上就是Java设计模式的7个设计原则的全部内容,感谢阅读!

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

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

相关文章

LCM通讯的使用

本文主要介绍LCM通讯的基本使用,内容主要整理自官网 https://lcm-proj.github.io/lcm/index.html LCM,即Library for Communication and Marshalling,是一组用于消息传递与数据封装的库和工具,它主要的面向对象是要求高带宽、低延…

Cesium--获取当前相机中心与地面的射线焦点

本文记录获取当前相机中心与地面的射线焦点的方法,可用于视角缩放过程中,控制视角自动平滑切换到二维等场景: 方法一定是视角中心能与地面有交集,如果对着地平线或对着天空肯定是没效果的。直接放代码: //调整相机到正…

Objective-C 自定义渐变色Slider

文章目录 一、前情概要二、具体实现 一、前情概要 系统提供UISlider,但在开发过程中经常需要自定义,本次需求内容是实现一个拥有渐变色的滑动条,且渐变色随着手指touch的位置不同改变区域,类似如下 可以使用CAGradientLayer实现渐…

利用宝塔安装一套linux开发环境

更新yum,并且更换阿里镜像源 删除yum文件 cd /etc/yum.repos.d/ 进入yum核心目录 ls sun.repo rm -rf * 删除之前配置的本地源 ls 配置阿里镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 配置扩展包 wge…

paloalto防火墙CLI修改MGT IP

怎么样通过Cli修改MGT口的IP、掩码、网关、DNS呢? 1)console连接上CLi,输入configure进入系统视图 输入exit,退出到用户视图 2)在CLI修改带外管理MGT的IP地址、掩码、网关、DNS,默认带外管理是开启https、…

[Elasticsearch]ES近似实时搜索的原因|ES非实时搜索的原因|ES Near real-time search

Elasticsearch-专栏👈️ 往期回顾: ES单一查询定义👈️ ES深分页问题👈️ ES商城搜索实战👈️ ES环境搭建:单节点模式/集群模式👈️ ES开启认证👈️ 近似实时搜索(Near real-t…

FlinkModule加载HiveModule异常

HiveModule这个模块加载不出来 加在不出来这个模块&#xff0c;网上查说是要加下面这个依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-hive_${scala.binary.version}</artifactId><version>${flink.…

Elasticsearch基础概念

Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎; 常见的使用场景 网站搜索,代码搜索等日志管理与分析,应用系统性能分析,安全指标监控等数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务 ES基本概念 文档 我们向elasticsearch存…

【活动预告】Apache IoTDB TsFile 智慧能源应用“上会”啦!

2024 年&#xff0c;站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上&#xff0c;为进一步推动全球数据库产业进步&#xff0c;由中国通信标准化协会、大数据技术标准推进委员会主办的“2024 可信数据库发展大会”将于 2024 年 7 月 16-17 日&#xff0c;在北京朝…

跟着李沐学AI:Softmax回归

回归 vs 分类 回归用于估计一个连续值 分类用于预测一个离散类别 两个经典的数据集&#xff1a; MNIST数据集&#xff1a; MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;数据集是一个广泛应用于机器学习和深度学习领域的手写数字…

车载视频监控管理方案:无人驾驶出租车安全出行的保障

近日&#xff0c;无人驾驶出租车“萝卜快跑”在武汉开放载人测试成为热门话题。随着科技的飞速发展&#xff0c;无人驾驶技术已逐渐从概念走向现实&#xff0c;特别是在出租车行业中&#xff0c;无人驾驶出租车的推出将为公众提供更为安全、便捷、高效的出行服务。 视频监控技…

【Linux杂货铺】2.进程优先级

1.进程优先级基本概念 进程优先级是操作系统中用于确定进程调度顺序的一个指标。每个进程都会被分配一个优先级&#xff0c;优先级较高的进程会在调度时优先被执行。进程优先级的设定通常根据进程的重要性、紧急程度、资源需求等因素来确定。操作系统会根据进程的优先级来决定进…

免费开源的工业物联网(IoT)解决方案

什么是 IoT&#xff1f; 物联网 (IoT) 是指由实体设备、车辆、电器和其他实体对象组成的网络&#xff0c;这些实体对象内嵌传感器、软件和网络连接&#xff0c;可以收集和共享数据。 IoT 设备&#xff08;也称为“智能对象”&#xff09;范围广泛&#xff0c;包括智能恒温器等…

PHP企业工商年报大师微信小程序系统源码

&#x1f31f;轻松搞定年报难题&#xff01;&#x1f4bc; &#x1f680;【一键直达&#xff0c;年报不再繁琐】 还在为每年的企业工商年报而头疼吗&#xff1f;繁琐的表格、复杂的流程&#xff0c;让人望而却步&#xff1f;现在有了“企业工商年报大师”微信小程序&#xff…

Docker:基础概念、架构与网络模式详解

1.Docker的基本概念 1.1.什么是docker Docker是一个用于开发,交付和运行应用程序的开放平台.docker使您能够将应用程序域基础框架分开,以便你可以快速开发交付软件.使用docker,你可以管理你的基础架构以管理应用程序相同的方式.通过利用docker用于交付,测试和部署代码的方法,你…

解决Ubuntu 22.04 vscode搜狗拼音输入无法输入中文

关闭vscode 编辑~/.bashrc&#xff0c;添加以下内容 export GTK_IM_MODULExim export QT_IM_MODULExim export XMODIFIERSimfcitx source ~/.bashrc && code 重新加载环境变量后启动code&#xff0c;即可以正常使用搜狗拼音输入法了

MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询

文章目录 1. 构造数据2. MongoDB 比较查询操作符1. $eq 等于1.1 等于指定值1.2 嵌入式文档中的字段等于某个值1.3 数组元素等于某个值1.4 数组元素等于数组值 2. $ne 不等于3. $gt 大于3.1 匹配文档字段3.2 根据嵌入式文档字段执行更新 4. $gte 大于等于5. $lt 小于6. $lte 小于…

java内部类的本质

定义在类内部&#xff0c;可以实现对外部完全隐藏&#xff0c;可以有更好的封装性&#xff0c;代码实现上也往往更为简洁。 内部类可以方便地访问外部类的私有变量&#xff0c;可以声明为private从而实现对外完全隐藏。 在Java中&#xff0c;根据定义的位置和方式不同&#xf…

什么是IOT 可编程控制系统

IOT可编程控制系统GF-MAXCC是一种基于物联网&#xff08;Internet of Things, IoT&#xff09;技术的可编程中央控制主机。它集成了多种先进的技术和功能&#xff0c;能够在物联网系统中发挥关键作用&#xff0c;实现对多种设备的集中管理和控制。 一、定义与概述 定义&#x…

虚幻引擎ue5如何调节物体锚点

当发现锚点不在物体上时&#xff0c;如何调节瞄点在物体上。 步骤1&#xff1a;按住鼠标中键拖动锚点&#xff0c;在透视图中多次调节锚点位置。 步骤2:在物体上点击鼠标右键点击-》锚定--》“设置为枢轴偏移”即可。