欢迎您访问新疆栾骏商贸有限公司,公司主营电子五金轴承产品批发业务!
全国咨询热线: 400-8878-609

新闻资讯

常见问题

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

作者:用户投稿2026-01-11 06:45:34
目录
  • 定义
  • 案例
    • 需求
    • 方案一
    • 方案二
    • 对比分析
  • 总结
    • 如何遵守单一职责原则

      定义

      单一职责原则(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: 2025/1/28 14:45
           * @param car
           * @return void
           * @exception:
           * @update:
           * @updatePerson:
           **/
          public static void car(String car) {
              System.out.println(car + "在公路上跑");
          }
      
          /**
           * 火车
           * @author: liyajie
           * @date: 2025/1/28 14:45
           * @param train
           * @return void
           * @exception:
           * @update:
           * @updatePerson:
           **/
          public static void train(String train) {
              System.out.println(train + "在铁轨上跑");
          }
      
          /**
           * 飞机
           * @author: liyajie
           * @date: 2025/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: 2025/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: 2025/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: 2025/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("飞机");
          }
      }

      对比分析

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

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

      总结

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

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

      如何遵守单一职责原则

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