单一职责原则(Single Responsibility Principle,SRP)
原创大约 2 分钟
单一职责原则(Single Responsibility Principle,SRP)的术语由罗伯特·C·马丁(Robert Cecil Martin)在他的《敏捷软件开发,原则,模式和实践》的书中一篇名为面向对象设计原则
的章节里首次提出。
单一职责原则指出:一个类应该只有一个引起它变化的原因,这意味着一个类应该只负责一项职责,遵循这一原则可以提高代码的可维护性和可读性
。
例如,某电商平台会依据用户积分来计算用户等级,这个工作是目前由User
用户类完成的。
package com.itechthink.designrule.single;
/**
* 用户类
*
*/
public class User {
private int point;
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
/**
* 在用户实体类中计算用户等级
*
*/
public int getLevel(int point) {
if (0 <= point && point <= 100) {
return 1;
} else if(100 < point && point <= 1000) {
return 2;
} else {
return 0;
}
}
}
但如果按照单一职责原则,它就不应该这么做。
package com.itechthink.designrule.single;
/**
* 计算等级接口
*
*/
public interface ICountLevel {
int count(int point);
}
/**
* 计算等级实现
*
*/
public class CountLevel implements ICountLevel {
@Override
public int count(int point) {
if (0 <= point && point <= 100) {
return 1;
} else if(100 < point && point <= 1000) {
return 2;
} else {
return 0;
}
}
}
/**
* 单一职责原则是指一个类或者模块只负责完成一个职责(或者功能),而不要存在多于一个导致类变更的原因。
* 将计算等级的职责从用户类中分离出来
*
*/
public class Single {
public static void main(String[] args) {
// 未使用单一职责原则的代码
User user = new User();
System.out.println(user.getLevel(user.getPoint()));
// 修改后的代码
CountLevel countLevel = new CountLevel();
System.out.println(countLevel.count(user.getPoint()));
}
}
感谢支持
更多内容,请移步《超级个体》。