定义
不要存在多于一个导致类变更的原因,也就是一个类 ,接口,方法只负责一项职责,将不同的职责代码区分成不同的类,在后期代码的维护中可以互不影响。
优点
1.降低类的复杂度
2.提高类的可读性
3.提高系统的可维护性
4.降低变更引起的风险
代码示例
用购物商品为例
创建一个商店类,有一个购买的方法,方法里负责了两种功能
public void buy(String Vip){
if ("Vip".equals(commodity)){
System.out.println("Vip客户打9折");
}else{
System.out.println("原价");
}
}
}
现在如果需求变更,在操作下单过程来一个判断活动优惠,而且两类客户的活动优惠是不一样的,这时候我们就需要在判断语句中分别修改代码,而修改任意逻辑的代码待会影响到别的逻辑代码,有可能造成不可控的风险,现在对两个逻辑解耦
创建两个类来完成职责
public void buy() {
System.out.println("Vip客户打9折");
}
}
public void buy(){
System.out.println("原价");
}
}
通过这两个类把不同的处理逻隔离开来
新的需求
现在对商店有两个任务,就是有一个显示商品的职责,一个是下单,退单等操作的职责
首先定制一个顶层的接口来抽象职责,遵循单一职责我们对两个职责创建两个接口来解耦
public interface Info {
String getName(String commodity);
Double getPrice(String commodity);
}
public interface Order {
void buy(String commodity);
void SaleReturn(String commodity);
}
public class ManagementImpl implements Info,Order {
@Override
public String getName(String commodity) {
return null;
}
@Override
public Double getPrice(String commodity) {
return null;
}
@Override
public void buy(String commodity) {
}
@Override
public void SaleReturn(String commodity) {
}
}
创建一个类去实现这两个接口,就可以完成功能需求了
类图
这样可以代码的可读性就比较好了。
但是在实际的开发中会存在项目的依赖,组合,聚合等因素,很多类其实也是不符合这个单一职责原则的,学习这一职责并不是需要编写代码的时候一定要遵循,但是它的出现是提醒我们编写代码的时候可以遵循就尽量的去遵循,帮助我们在编写代码中尽量的使接口,类,方法达到单一职责,这样对项目后期的维护会有非常大的帮助。