简述
就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
举例:
public class DemoEntity {
@Id
private int id;
private String name;
private String password;
public void addUser(){}
public void modify(){}
}
这里的业务方法和属性应该放到不同的类中,每个类承担自己的单一职责,类似于实际开发中的代码分层,使代码简洁易懂,降低耦合度,利于维护和扩展。
如果一个方法逻辑不复杂的情况下,可以修改方法实现,否则要拆分为两个方法,遵循方法级别的单一职责原则;如果一个类方法不多的情况下,可以只增加方法,而不用分拆为多个类,否则要拆分为多个类,遵循类级别的单一职责原则。
遵循单一职责原的优点有:
可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
提高类的可读性,提高系统的可维护性;
变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
不仅是类,方法也应该遵循单一原则,即一个方法只做一件事,比如:
//修改密码
public class ModifPwdService{
public void modifypwd(){
getPwd();
newPwd();
md5();
}
public void md5(){
System.out.println("加密密码");
}
public void getPwd(){
System.out.println("获取密码");
}
public void newPwd(){
System.out.println("获取新密码");
}
}
用一个实例来说明
假设有一个猪场,生产猪头肉,猪蹄,猪耳朵等等,需要怎样来实现?
有三个类,每个类里面有专门生产猪的零件的方法:
public class PigHead{
public void pigHeads(){
System.out.println("猪头出来了");
}
}
public class PigFoot {
public void pigFoots(){
System.out.println("猪蹄出来了");
}
}
public class PigEars {
public void PigEars(){
System.out.println("猪耳朵出来了");
}
}
然后猪场开业了,但是今天货不足,只能卖猪头和猪蹄,那就调用两个类的方法:
public class SellPig{
public static void main(String[] args) {
PigHead pigHead = new PigHead();
pigHead.pigHeads();
PigFoot pigFoot = new PigFoot();
pigFoot.pigFoots();
}
}
结果:
假如明天想全都卖,那么只需要调用三个即可:
public class SellPig{
public static void main(String[] args) {
PigHead pigHead = new PigHead();
pigHead.pigHeads();
PigFoot pigFoot = new PigFoot();
pigFoot.pigFoots();
PigEars pigEars = new PigEars();
pigEars.PigEars();
}
}
结果:
但是客户想买肘子的特别多,所以又开始做一个肘子类了:
public class PigMeat {
public void PigMeats(){
System.out.println("猪肘子出来了");
}
}
如果想卖熟的猪头也只需要更改猪头的方法即可,并不会影响到其他类的运行。