单一职责原则:
基本介绍:
对类来说,即一个类应该只负责一项职责(不代表类中只能有一个方法)。如类A负责两份不同的职责,职责1,职责2当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。
案例:
方式一:
2
3 /**
4 * @auther cheng
5 * @create 2020-08-12 22:16
6 * 单一职责原则
7 */
8 public class SingleResponsibility1 {
9
10 public static void main(String[] args) {
11
12 Vehicle vehicle = new Vehicle();
13 vehicle.run("汽车");
14 vehicle.run("摩托车");
15 vehicle.run("轮船");
16
17 }
18
19 }
20 //方式一:
21 //交通工具类
22 //存在的问题:
23 //1.在run方法中,违反了单一职责原则
24 //2.解决的方案:根据交通工具运行环境的不同,分解成不同的类即可
25 class Vehicle{
26 public void run(String vehicle){
27 System.out.println(vehicle + "在公路上跑...");
28 }
29 }
汽车在公路上跑...
摩托车在公路上跑...
轮船在公路上跑... 职责2执行错误
存在的问题:
1.在run方法中,违反了单一职责原则
2.解决方案:根据交通工具运行环境的不同,分解成不同的类即可
方式二:
1 package cn.rabcheng.singleresponsibility;
2
3 /**
4 * @auther cheng
5 * @create 2020-08-12 22:16
6 * 单一职责原则
7 */
8 public class SingleResponsibility2 {
9
10 public static void main(String[] args) {
11
12 RoadVehicle roadVehicle = new RoadVehicle();
13 AirVehicle airVehicle = new AirVehicle();
14 WaterVehicle waterVehicle = new WaterVehicle();
15
16 roadVehicle.run("汽车");
17
18 airVehicle.run("飞机");
19
20 waterVehicle.run("轮船");
21
22 }
23
24 }
25
26 //方式二:
27 //1.遵守单一职责
28 //2.但是这么做改动很大,即将类分解且修改客户端(main方法)
29 //3.改进:直接修改Vehicle类,改动代码会比较少
30 class RoadVehicle{
31 public void run(String vehicle){
32 System.out.println(vehicle + "在公路上跑...");
33 }
34 }
35
36 class AirVehicle{
37 public void run(String vehicle){
38 System.out.println(vehicle + "在天上上飞...");
39 }
40 }
41
42 class WaterVehicle{
43 public void run(String vehicle){
44 System.out.println(vehicle + "在水上上跑...");
45 }
46 }
47
48 汽车在公路上跑...
49 飞机在天上上飞...
50 轮船在水上上跑...
遵守单一职责,
但是这么做改动很大,即将类分解且改动客户端(main方法)
改进:直接修改Vehicle类,改动代码会比较少
方式三:
1 package cn.rabcheng.singleresponsibility;
2
3 /**
4 * @auther cheng
5 * @create 2020-08-12 22:16
6 * 单一职责原则
7 */
8 public class SingleResponsibility3 {
9
10 public static void main(String[] args) {
11
12 Vehicle2 vehicle = new Vehicle2();
13 vehicle.runRoad("汽车");
14 vehicle.runAir("飞机");
15 vehicle.runWater("轮船");
16
17 }
18
19 }
20
21 //方式三:
22 //1.这种方法没有对原来的类做很大的修改,只是增加方法
23 //2.这里虽然没有在类级别上遵守单一职责原则,但是在方法级别遵守单一职责原则
24 class Vehicle2{
25 public void runRoad(String vehicle){
26 System.out.println(vehicle + "在公路上跑...");
27 }
28
29 public void runAir(String vehicle){
30 System.out.println(vehicle + "在天上上飞...");
31 }
32
33 public void runWater(String vehicle){
34 System.out.println(vehicle + "在水上上跑...");
35 }
36 }
37 汽车在公路上跑...
38 飞机在天上上飞...
39 轮船在水上上跑...
这里没有对原来的类做很大的修改,只是增加方法
虽然没有带类级别遵守单一职责原则,但是在方法级别遵守单一职责原则
注意事项和细节:
- 降低类的复杂度,一个类负责一项职责(例如一个类负责一张数据库表的增删改查)
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,当我们遵守单一职责原则,只有逻辑足够简单,才可以在代码级别违反单一职责原则,只有类中方法数量足够少,可以在方法级别保持单一职责原则
