Java设计模式中的单一责任原则详解

 更新时间:2023年11月09日 11:17:28   作者:一只小熊猫呀  
这篇文章主要介绍了Java设计模式中的单一责任原则详解,应该有且仅有一个原因引起类的变更,即单一指责原则要求一个借口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,它就负责一件事情,需要的朋友可以参考下

1、基本介绍

对类来说,即一个类应该只负责一项职责。

如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分为A1,A2

2、应用实例

2.1未遵循单一责任原则

在方式1的run方法中,飞机在公路上运行。明显违反了单一责任原则

package com.weirdo.principle.singleResponsibility;

public class SingleResponsibility1 {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托车");
        vehicle.run("汽车");
        vehicle.run("飞机");
    }
    
    //交通工具类
    static class Vehicle{
        public void run(String vehicle){
            System.out.println(vehicle+"在公路上运行...");
        }
    }
}

2.2遵循单一责任原则(类级)

遵守单一责任原则。

但是这样做改动很大,即将类分写,同时需要修改客户端。

package com.weirdo.singleResponsibility;

public class SingleResponsibility2 {
    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.run("摩托车");
        roadVehicle.run("汽车");
        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("飞机");
    }
    static class RoadVehicle {
        public void run(String vehicle) {
            System.out.println(vehicle + "在公路上运行...");
        }
    }
    static class AirVehicle {
        public void run(String vehicle) {
            System.out.println(vehicle + "在天上上运行...");
        }
    }
}

2.3遵循单一责任原则(方法级)

这种修改方法没有对原来的类做大的修改,只是增加方法。

然没有在类这个级别上遵守单一责任原则,但是在方法级别上仍然是遵守单一责任

package com.weirdo.singleResponsibility;

public class SingleResponsibility3 {

    public static void main(String[] args) {
        Vehicle  vehicle = new Vehicle();
        vehicle.runAir("飞机");
        vehicle.runRoad("汽车");
        vehicle.runWater("航母");
    }

    static class Vehicle {
        public void runRoad(String vehicle) {
            System.out.println(vehicle + "在公路上运行...");
        }
        public void runAir(String vehicle) {
            System.out.println(vehicle + "在公路上运行...");
        }
        public void runWater(String vehicle) {
            System.out.println(vehicle + "在水里运行...");
        }
    }
}

3、注意事项

  • 降低类的复杂都,一个类只负责一项职责
  • 提高类的可读性,可维护性
  • 通常情况下,应该遵守单一责任原则。只有逻辑足够简单,才可以在代码级违反单一责任原则:只有类中方法数量足够少。可以在方法级别保持单一责任原则

到此这篇关于Java设计模式中的单一责任原则详解的文章就介绍到这了,更多相关Java单一责任原则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot整合Mybatis和SQLite的详细过程

    Springboot整合Mybatis和SQLite的详细过程

    这篇文章主要介绍了Springboot整合Mybatis和SQLite的详细过程,本文通过图文示例相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 详解Java使用JMH进行基准性能测试

    详解Java使用JMH进行基准性能测试

    本文主要介绍了Java使用JMH进行基准性能测试,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Spring Boot集成Thymeleaf的方法

    Spring Boot集成Thymeleaf的方法

    这篇文章主要介绍了Spring Boot集成Thymeleaf的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Maven的安装配置详解

    Maven的安装配置详解

    这篇文章主要介绍了Maven的安装配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 关于mybatis的一级缓存和二级缓存的那些事儿

    关于mybatis的一级缓存和二级缓存的那些事儿

    MyBatis自带的缓存有一级缓存和二级缓存,今天我们就来学习一下,文中有非常详细的总结,对正在学习的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • Java OpenCV图像处理之SIFT角点检测详解

    Java OpenCV图像处理之SIFT角点检测详解

    SIFT,即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。本文将详细介绍一下Java OpenCV图像处理中的SIFT角点检测,需要的可以参考一下
    2022-02-02
  • Java实现字符串匹配的示例代码

    Java实现字符串匹配的示例代码

    这篇文章主要介绍了Java实现字符串匹配,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Spring Cloud Ribbon实现客户端负载均衡的方法

    Spring Cloud Ribbon实现客户端负载均衡的方法

    本篇文章主要介绍了Spring Cloud Ribbon实现客户端负载均衡的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • springboot vue接口测试前后端实现模块树列表功能

    springboot vue接口测试前后端实现模块树列表功能

    这篇文章主要为大家介绍了springboot vue接口测试前后端实现模块树列表功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java中DataInputStream和DataOutputStream的使用方法

    Java中DataInputStream和DataOutputStream的使用方法

    这篇文章主要介绍了Java中DataInputStream和DataOutputStream的使用方法,通过创建对象展开具体的内容介绍,需要的小伙伴可以参考一下
    2022-05-05

最新评论