Java设计模式七大原则之单一职责原则详解
作者:温故知新之java 时间:2022-05-12 20:48:58
定义
单一职责原则(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("飞机");
}
}
对比分析
方案一,是将汽车,火车,飞机的方法都写在了同一个类里,但是每个交通工具都有自己的方法,做到了方法上的单一职责,如果发生变更,该方案改动较小,但有一定的误操作风险
方案二,是将汽车,火车,飞机分别创建三个类,每个类里只有一种交通工具的方法,做到了类上的单一职责,如果发生变更,该方案改动较大,没有误操作风险
来源:https://juejin.cn/post/7058150940045475877
标签:Java,设计模式,单一职责原则
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 17的一些新特性介绍
2022-04-11 15:33:15
Jersey Restful接口如何获取参数的问题
2023-10-29 14:44:16
spring cloud gateway如何获取请求的真实地址
2023-11-28 20:20:12
![](https://img.aspxhome.com/file/2023/9/60599_0s.png)
java(jdk)环境变量配置(XP、win7、win8)图文教程详解
2021-11-01 15:06:48
![](https://img.aspxhome.com/file/2023/7/63417_0s.png)
详解java中float与double的区别
2021-09-12 11:04:47
Java8时间接口LocalDateTime详细用法
2023-11-25 09:56:49
Java编程实现月食简单代码分享
2022-12-27 12:33:24
![](https://img.aspxhome.com/file/2023/3/79943_0s.png)
Prometheus 入门教程之SpringBoot 实现自定义指标监控
2022-08-02 12:58:54
![](https://img.aspxhome.com/file/2023/7/67487_0s.jpg)
基于C#实现网络爬虫 C#抓取网页Html源码
2022-11-16 22:19:05
Unity3D实现攻击范围检测
2023-07-02 12:12:39
Java数据结构之双向链表图解
2023-02-07 10:07:22
![](https://img.aspxhome.com/file/2023/4/88194_0s.jpg)
SpringBoot中默认缓存实现方案的示例代码
2023-11-24 05:50:30
![](https://img.aspxhome.com/file/2023/7/59937_0s.jpg)
Java实现求二叉树的深度和宽度
2022-01-11 18:38:41
Java代码实现简单酒店管理系统
2023-11-21 03:38:57
![](https://img.aspxhome.com/file/2023/9/59539_0s.jpg)
Java如何在PDF中添加ToolTip工具提示
2021-12-31 12:12:53
![](https://img.aspxhome.com/file/2023/6/77456_0s.png)
Android 获取判断是否有悬浮窗权限的方法
2023-11-04 22:48:18
Java ArrayList中存放引用数据类型的方式
2023-11-16 15:23:46
![](https://img.aspxhome.com/file/2023/6/60556_0s.png)
java + dom4j.jar提取xml文档内容
2023-11-29 03:55:10
Spring框架学习之Cache抽象详解
2023-07-20 17:37:47
IDEA调试技巧条件断点实现步骤详解
2023-11-24 16:02:42
![](https://img.aspxhome.com/file/2023/1/70501_0s.png)