Java设计模式中的七大原则详细讲解

Java设计模式中的七大原则详细讲解

1. 单一职责原则

单一职责原则(Single Responsibility Principle,SRP)指的是一个类或者模块只负责完成一个职责或功能。如果一个类职责过多可能导致其难以维护,因此需要将其拆分成多个类。

例如,我们有一个 User 类,其职责包括用户登录和注册,查看用户信息等。如果我们将用户登录和注册另外封装成一个 Auth 类,那么 User 类就只需要负责处理查看用户信息这个职责,代码会更加清晰易懂。

2. 开闭原则

开闭原则(Open-Closed Principle,OCP)指的是一个软件实体应该对扩展开放,对修改关闭。也就是说,在不修改原有代码的前提下,能够扩展新的功能。这样可以提高程序的复用性和可维护性。

例如,我们有一个 Animal 类,其具有类似于 run()sleep() 等方法。现在我们需要扩展一些新的行为,比如 fly(),我们可以采用继承的方式,在原有代码基础上新增一个 Bird 类,并实现 fly() 方法,这样就实现了对扩展开发,对修改关闭。

3. 里氏替换原则

里氏替换原则(Liskov Substitution Principle,LSP)是基于面向对象设计基本特征之一——继承而引入的。它指出,如果一个程序使用的是父类对象的话,那么一定可以使用其子类来进行替换,而不会影响程序的正确性。

例如,我们有一个抽象的 Shape 类,其有一个计算面积的方法。现在我们在这个基础上分别拓展出了 TriangleRectangle 类,并分别实现了计算自己面积的方法。此时,我们可以将 TriangleRectangle 对象作为 Shape 对象使用,以便进行统一的处理。

4. 接口隔离原则

接口隔离原则(Interface Segregation Principle,ISP)指的是多个客户端不应该依赖着他们不需要的接口。这主要是为了避免类的接口过于臃肿而不好维护,同时也可以避免各种与实际需求不符的问题。

例如,我们有一个 Calculator 接口,其中定义了基本的 add()subtract() 等方法。如果客户端仅仅需要使用 add() 方法,那么我们可以将其定义为单独的 Adder 接口,避免客户端依赖接口过于臃肿。

5. 依赖倒置原则

依赖倒置原则(Dependency Inversion Principle,DIP)是指高层模块不应该依赖底层模块,而是应该依赖其抽象。同时,抽象不应该依赖细节,细节应该依赖抽象。

例如,我们有一个 Database 类,其提供数据库的增删改查一系列方法。如果我们在主程序中直接调用这些方法,那么主程序将会与 Database 类产生强耦合,而且会导致代码难以维护和修改。相反,我们可以定义一个 IDatabase 接口,主程序通过该接口与 Database 类产生关联,这样就能使得主程序的修改对 Database 类的修改产生最小影响。

6. 迪米特法则

迪米特法则(Law of Demeter,LOD)又称最小知识原则(Least Knowledge Principle,LKP),是指一个对象应该对其他对象有尽可能少的了解。也就是说,与其他对象的交互应该尽可能地限制在最小化的范围内。这样可以降低对象之间的耦合度,从而提高软件系统的稳定性和可维护性。

例如,我们有一个 Car 类,其内部需要包含 EngineWheelLight 等多个零件。如果我们在 Car 类中直接调用这些零件的方法,那么将会导致代码的瘤背软,难以扩展和维护。相反,我们可以在 Car 类中仅包含这些零件的引用,在需要调用相关零件的方法时,以参数的方式引入,就能践行最小化知识原则,降低对象间的耦合。

7. 合成复用原则

合成复用原则(Composite Reuse Principle,CRP)是指在设计时应当优先使用对象组合,而不是继承。通过使用对象组合,可以灵活的对象的功能,并且可以避免继承所带来的紧耦合关系。

例如,我们有一个 Person 类,其中包含 HeadArmLeg 等多个部件。如果我们采用继承的方式来拓展 ManWoman 类,那么就会导致代码的耦合度太高。相反,我们可以采用对象组合的方式,将 HeadArmLeg 等部件定义为对象,并在 Person 中引用这些对象,这样就可以灵活地拓展 ManWoman 类了。

以上七大原则,是实际编程中必须遵守的基本规则,能够提高代码的质量和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java设计模式中的七大原则详细讲解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android camera2 判断相机功能是否可控的实例

    以下是Android camera2 判断相机功能是否可控的实例的完整攻略: 导入相机相关的依赖库 groovy implementation ‘androidx.camera:camera-camera2:1.0.0’ implementation ‘androidx.camera:camera-lifecycle:1.0.0’ 创建相机管理类 “`ja…

    other 2023年10月16日
    00
  • SpringBoot 配置文件加载位置与优先级问题详解

    下面我来详细讲解一下 Spring Boot 配置文件加载位置与优先级问题的攻略。 1. Spring Boot 配置文件的加载位置 Spring Boot 配置文件的加载位置非常灵活,可以根据不同的需求和情况进行配置。Spring Boot 配置文件的加载位置可以分为以下三种情况: 1.1 classpath下的默认加载位置 Spring Boot 默认会…

    other 2023年6月25日
    00
  • Win10快速预览版19577怎么手动更新升级?

    更新Win10快速预览版可以帮助您体验最新的功能和修复已知的问题。下面是手动更新和升级Win10快速预览版19577的完整攻略。 步骤一:检查设备是否已获得更新 在开始更新和升级之前,首先要检查您的设备是否已获得19577版本的更新。可以按照以下步骤检查: 打开设置。 选择“更新和安全”选项。 点击“Windows 更新”。 检查最新的可用更新。 如果看到您…

    other 2023年6月27日
    00
  • Lombok中@Builder和@SuperBuilder注解的用法案例

    Lombok 是 Java 开发中最常用的工具类库之一,它的作用是帮助我们简化代码、提高开发效率。其中,@Builder 和 @SuperBuilder 两个注解是 Lombok 中非常实用的注释。下面,我们将详细讲解它们的用法,并提供两个案例说明。 @Builder 注解 @Builder 注解是 Lombok 提供的一种非常方便的功能,可以帮助我们生成一…

    other 2023年6月26日
    00
  • PowerShell入门教程之PowerShell和Cmd命令行的关系?

    PowerShell入门教程之PowerShell和Cmd命令行的关系 前言 PowerShell是一种较新的命令行工具,可以增强命令行的功能和可扩展性。若在Windows操作系统下使用过命令提示符(cmd)的用户也不难发现PowerShell与cmd很相似。实际上,cmd和PowerShell都是Windows命令行工具,二者在实现和使用方式上都有相似之处…

    other 2023年6月26日
    00
  • html提示信息的样式

    HTML提示信息的样式 在网站开发中,常常需要向用户提供一些重要信息,例如错误提示、警告、成功提示等。那么如何用 HTML 语言来呈现这些提示信息呢?本文将介绍几种常用的 HTML 提示信息样式。 1. 普通文本 最简单的提示信息样式就是普通文本,例如: <p>请注意:提交前请检查输入内容是否正确。</p> 这种方式非常简单,但缺点是…

    其他 2023年3月28日
    00
  • 记一次vnc远程连接linux问题解决记录(5900端口测试、kde桌…

    记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面环境) 背景 作为一名Linux爱好者,我经常会在家用VNC远程访问公司或家里的Linux机器。最近,我尝试远程连接一台安装KDE桌面环境的Linux机器,但是发现无法连接。在经过一番摸索之后,我找到了解决方法,现在将其分享给大家。 问题描述 我尝试使用VNC Viewer远程连接Lin…

    其他 2023年3月28日
    00
  • mysqltinyint范围

    以下是关于MySQL中TINYINT类型的范围的完整攻略: TINYINT类型的范围 TINYINT是MySQL中的一种整数类型,它占用1个字节(8位),可以存储范围为-128到127的整数。如果使用UNSIGNED关键字,可以存储范围为0到255的整数。 示例1:创建TINYINT类型的列 以下是一个示例,演示如何在MySQL中创建一个TINYINT类型的…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部