Java设计模式七大原则之单一职责原则详解

 更新时间:2022年02月09日 09:30:24   作者:温故知新之java  
单一职责原则(Single Responsibility Principle, SRP),有且仅有一个原因引起类的变更。简单来说,就是针对一个java类,它应该只负责一项职责。本文将详细介绍一下Java设计模式七大原则之一的单一职责原则,需要的可以参考一下

定义

单一职责原则(Single Responsibility Principle, SRP),有且仅有一个原因引起类的变更。简单来说,就是针对一个java类,它应该只负责一项职责。例如一个Test.java类,它有两个职责:职责1,职责2。当职责1进行修改时,有可能影响到职责2,所以需要将Test.java类拆分成Test1.java和Test2.java两个单一职责的类。

案例

需求

有一个交通工具类,里面定义一个在各种交通工具的方法,创建交通工具的实例,调用方法,方法内执行打印操作

方案一

定义交通工具类Transportation.java

public class Transportation {

    /**
     * 汽车
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param car
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public static void car(String car) {
        System.out.println(car + "在公路上跑");
    }

    /**
     * 火车
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param train
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public static void train(String train) {
        System.out.println(train + "在铁轨上跑");
    }

    /**
     * 飞机
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param airplane
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public static void airplane(String airplane) {
        System.out.println(airplane + "在天上飞");
    }

定义测试类Test1.java

public class Test1 {
    public static void main(String[] args) {
        Transportation transportation1 = new Transportation();
        transportation1.car("汽车");
        transportation1.train("火车");
        transportation1.airplane("飞机");
    }
}

方案二

定义汽车类Car.java

public class Car {

    /**
     * 汽车
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param car
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(String car) {
        System.out.println(car + "在公路上跑");
    }
}

定义火车类Train.java

public class Train {

    /**
     * 火车
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param train
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void train(String train) {
        System.out.println(train + "在铁轨上跑");
    }
}

定义飞机类Airplane.java

public class Airplane {

    /**
     * 飞机
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param airplane
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void airplane(String airplane) {
        System.out.println(airplane + "在天上飞");
    }
}

定义测试类Test2.java

public class Test2 {
    public static void main(String[] args) {
        Car car = new Car();
        car.car("汽车");

        Train train = new Train();
        train.train("火车");

        Airplane airplane = new Airplane();
        airplane.airplane("飞机");
    }
}

对比分析

方案一,是将汽车,火车,飞机的方法都写在了同一个类里,但是每个交通工具都有自己的方法,做到了方法上的单一职责,如果发生变更,该方案改动较小,但有一定的误操作风险

方案二,是将汽车,火车,飞机分别创建三个类,每个类里只有一种交通工具的方法,做到了类上的单一职责,如果发生变更,该方案改动较大,没有误操作风险

总结

从以上的案例中总结,可以得出:

  • 降低类的复杂度,一个类只负责一项职责 (一个类职责少了,相应的复杂度不就低了嘛)
  • 提高类的可读性以及可维护性 (相应的复杂度降低了,代码量就会减少,可读性也就提高了,可维护性自然也就提高了)
  • 降低变更引起的风险 (一个类职责越多,变更的可能性就会越大,变化带来的风险就会越大)
  • 通常情况下,我们应当遵守类级别单一职责原则 (只有逻辑足够简单,才可以在代码中违反单一职责原则)

如何遵守单一职责原则

从业务出发,从需求出发,识别出同一个类型的职责,进行合理的职责分解。

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

相关文章

  • 解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC

    解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC

    本节将会介绍一下:对象的内存分配与回收策略;对象何时进入新生代、老年代;MinorGC、MajorGC、FullGC的定义区别和触发条件;还有通过图示展示了GC的过程。
    2021-09-09
  • Java 详解Map集合之HashMap和TreeMap

    Java 详解Map集合之HashMap和TreeMap

    本章具体介绍了HashMap、TreeMap两种集合的基本使用方法和区别,图解穿插代码实现。 JAVA成仙路从基础开始讲,后续会讲到JAVA高级,中间会穿插面试题和项目实战,希望能给大家带来帮助
    2022-03-03
  • Springboot2整合knife4j过程解析

    Springboot2整合knife4j过程解析

    这篇文章主要介绍了Springboot2整合knife4j过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • mybatis拦截器注册初始化编写示例及如何生效详解

    mybatis拦截器注册初始化编写示例及如何生效详解

    这篇文章主要为大家介绍了mybatis拦截器注册初始化编写示例及如何生效详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Java正则表达式的基本用法和实例大全

    Java正则表达式的基本用法和实例大全

    这篇文章主要给大家介绍了关于Java正则表达式的基本用法和实例的相关资料,大家在使用Java正则表达式的时候可查阅这篇文章,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Java基于NIO实现群聊功能

    Java基于NIO实现群聊功能

    这篇文章主要为大家详细介绍了Java基于NIO实现群聊功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法

    解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法

    这篇文章主要介绍了解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • java中DecimalFormat四舍五入用法详解

    java中DecimalFormat四舍五入用法详解

    这篇文章主要为大家详细介绍了java中DecimalFormat四舍五入的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 关于struts2中Action名字的大小写问题浅谈

    关于struts2中Action名字的大小写问题浅谈

    这篇文章主要给大家介绍了关于struts2中Action名字大小写问题的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • 阿里云部署SpringBoot项目启动后被杀进程的问题解析

    阿里云部署SpringBoot项目启动后被杀进程的问题解析

    这篇文章主要介绍了阿里云部署SpringBoot项目启动后被杀进程的问题,本文给大家分享问题原因所在及解决步骤,需要的朋友可以参考下
    2023-09-09

最新评论