网站首页 > 基础教程 正文
上一个轮的加班刚刚完结还没一周,领导就跑来告诉我:“小菜鸟,周末跟加班才更般配哟!”可怜的孩子又迎来了新的加急任务,美好的加班生活又要开始喽。
不!这不是菜鸟想要的生活,菜鸟要反抗,菜鸟决定了,要辞职。这不偷偷拿出手机登录各大招聘网站进行了浏览,突然发现怎么招聘还要求会设计模式呢?为此赶紧拿出那早已沾满灰尘的资料进行恶补。哎!在这之前还是扶我起来加班吧。
以上内容纯属虚构(除了加班),如有雷同请看下文。
今天让我们一起学习一下设计模式七大原则之——单一职责原则。
基本概念
拿java的类来说单一职责原则,就是一个类只负责一项职责,也可以称之为一项功能。
单一职责带来的好处
1、一个类只负责一项职责,最直接的好处就是降低类的复杂度。
2、职责的单一会提高类的可读性,提高程序的可维护性,降低后期维护成本。
3、因其只负责一项功能,所以当代码变动时不会影响到到其他功能,从而大大降低变更引起的风险。
理论知识就讲到这里,下面让我们看一段示例代码,从而加深一下对单一职责原则的理解。
代码时间
违反了单一职责原则的示例代码:
public class SingleResponsibilityDemo1 {
public static void main(String[] args) {
Eat eat = new Eat();
eat.eat("老虎");
eat.eat("山羊");
}
}
/**
* 吃饭类
*/
class Eat {
public void eat(String animalName) {
if ("老虎".equals(animalName)) {
System.out.println(animalName + ",在狼吞虎咽的吃肉!");
} else if ("山羊".equals(animalName)) {
System.out.println(animalName + ",在细嚼慢咽的吃草!");
}
}
}
注:吃肉和吃草是两种行为,该类却写在一起了,典型的违反了单一职责原则。并且这样设计在之后需要添加吃其它食物的功能时需要再增加一个else if,当功能增多并且逻辑复杂时,会造成代码非常臃肿,难以理解和维护。
类级别遵守单一职责原则的示例代码:
public class SingleResponsibilityDemo2 {
public static void main(String[] args) {
EatMeat eatMeat = new EatMeat();
eatMeat.eatMeat("老虎");
EatGrass eatGrass = new EatGrass();
eatGrass.eatGrass("山羊");
}
}
// 吃肉类
class EatMeat {
public void eatMeat(String animalName) {
System.out.println(animalName + ",在狼吞虎咽的吃肉!");
}
}
// 吃草类
class EatGrass {
public void eatGrass(String animalName) {
System.out.println(animalName + ",在细嚼慢咽的吃草!");
}
}
在方法级别遵守单一职责原则的示例代码:
public class SingleResponsibilityDemo3 {
public static void main(String[] args) {
Eat eat = new Eat();
eat.eatMeat("老虎");
eat.eatGrass("山羊");
}
}
class Eat {
public void eatMeat(String animalName) {
System.out.println(animalName + ",在狼吞虎咽的吃肉!");
}
public void eatGrass(String animalName) {
System.out.println(animalName + ",在细嚼慢咽的吃草!");
}
}
个人意见
1、单一职责虽好,但也不可以生搬硬套,不然会引起类的增多,添加额外的维护成本。2、当代码的逻辑足够简单时,我们可以在代码级别违反单一职责原则;3、当类中的方法数量少,并且业务逻辑不是特别复杂时,可以在类级别上违背单一职责原则,下沉至方法级别保持即可。4、我们要根据需求和实际情况来灵活运用单一职责原则。
总体来说就是需要灵活运用单一职责原则,结合实际情况考虑是在类级别遵守还是在方法级别遵守。
今天的分享就到这里了,感觉文章写得不错的记得点赞加关注呦!
猜你喜欢
- 2025-05-03 Excel菜鸟的VBA学习笔记——01.宏取代Vlookup
- 2025-05-03 菜鸟新手尤为注意 看完再也不敢乱停了
- 2025-05-03 可编程控制器——西门子S7-300PLC
- 2025-05-03 设计模式系列:一文带你领略“访问者模式”的魅力
- 2025-05-03 程序员必备技能:设计模式之——组合模式
- 2025-05-03 Java多线程编程性能提升指南:从菜鸟到高手
- 2025-05-03 字节跳动竟然斥巨资开发出《Python知识手册》,高清PDF
- 2025-05-03 手写“栈”数据结构(数据结构栈的顺序表示和实现)
- 2025-05-03 深度解析设计模式七大原则之——里氏替换原则
- 2025-05-03 游戏开发编程到底是什么?(游戏开发用什么编程)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)