我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。
学习从来无捷径,循序渐进登高峰。
设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据),有的教科书上写的是六大原则,但是后来又新加了一个合成复用原则。本篇博客主要记录单一职责原则
。
一、基本介绍
对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 A1,A2。
二、应用实例
1、示例1
用一个类来描述程序员编写代码这个场景。
public class AnimalTest {
public static void main(String[] args) {
Programmer programmer = new Programmer();
programmer.program("静静"); // 静静使用记事本编写代码。
programmer.program("标标"); // 标标使用Eclipse编写代码。
}
}
class Programmer {
void program(String programmer) {
System.out.println(programmer + "使用Eclipse编写代码。");
}
}
2、示例2
在工作中发现,并不是所有的程序员都使用IDEA编写代码的,有的程序员喜欢用Eclipse,有的程序员喜欢用记事本。那么,这时候如果要遵循单一原则,就需要将Programmer类细分为野生程序员EclipseProgrammer和大佬程序BossProgrammer。
public class AnimalTest {
public static void main(String[] args) {
BossProgrammer bossProgrammer = new BossProgrammer();
bossProgrammer.program("静静"); // 静静使用记事本编写代码。
EclipseProgrammer eclipseProgrammer = new EclipseProgrammer();
eclipseProgrammer.program("标标"); // 毛毛使用Eclipse编写代码。
}
}
class BossProgrammer {
void program(String programmer) {
System.out.println(programmer + "使用记事本编写代码。");
}
}
class EclipseProgrammer {
void program(String programmer) {
System.out.println(programmer + "使用Eclipse编写代码。");
}
}
但是这样做的改动很大,即将类分解,同时修改客户端(客户端一般就是指的调用方)
3、示例3
改进:直接修改Programmer类,改动的代码会比较少
通过方法来进行区分其行为(Java当中行为指的就是方法)
public class AnimalTest {
public static void main(String[] args) {
Programmer programmer = new Programmer();
programmer.bossProgrammer("静静"); // 静静使用记事本编写代码。
programmer.eclipseProgrammer("标标"); // 毛毛使用Eclipse编写代码。
}
}
class Programmer {
void bossProgrammer(String programmer) {
System.out.println(programmer + "使用记事本编写代码。");
}
void eclipseProgrammer(String programmer) {
System.out.println(programmer + "使用Eclipse编写代码。");
}
}
三、单一职责原则
上面的示例是一种思想,而不是说一个方法,就一句话,我就非得都拆成两个类或者两个方法,那个我感觉大可不必,完全一个if else就可以。
不管是设计原则也好,还是设计模式也罢,更多的是一种思想,也可以认为是一种规范。
单一职责原则注意事项和细节:
- 降低类的复杂度,一个类只负责一项职责。
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有
逻辑足够简单
,才可以在代码级违反单一职责原则
;只有类中方法数量足够少
,可以在方法级别保持单一职责原则