一、定义

  单一职责原则(Single Responsibility Principle, SRP):一个软件实体(模块、类、方法)只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
  单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则

二、优点

  1.降低模块、类或方法的复杂度。
  2.提高类可读性,系统的可维护性。
  3.降低变更引起的风险。

三、示例

/**  
 * Create By Ke Shuiqiang  2020/3/5 23:31 
 * 小明同学的周末 
 */
public class XiaoMing {  
  
    public void activity(String activity){  
        if("学习".equals(activity)){  
            System.out.println("小明周末在家学习!");  
        }else{  
            System.out.println("小明周末出去运动了!"); 
        }  
    }  
}
public class Test {  
  
    public static void main(String[] args) {  
  
        XiaoMing xm = new XiaoMing();  
        xm.activity("学习");  
        System.out.println("------");  
        xm.activity("运动");  
  }  
}
小明周末在家学习!
------
小明周末出去运动了!

  在这个示例中,一个方法包含了两个职责运动和学习,很明显两种职责的业务逻辑是不一样的,必须要修改代码。而修改代码逻辑势必会相互影响容易造成不可控的风险。我们对职责进行分离解耦,来看代码:

//学习  
public void study(String study){  
    System.out.println("小明周末在家" + study + "!");  
}  
  
//运动  
public void motion(String motion){  
    System.out.println("小明周末出去" + motion + "!");  
}
public class Test {  
  
    public static void main(String\[\] args) {  
        XiaoMing xm = new XiaoMing();  
        xm.study("学习");  
        System.out.println("--------------");  
        xm.motion("运动");  
  }  
}
小明周末在家学习!
--------------
小明周末出去运动!

  修改后的代码由原先的activity()方法解耦成两个职责单一的方法,每个方法只有一种可能让它产生变化,这是方法层面的单一原则,我们在看看类方面。

public class Study {  
  
  //java学习  
  public void javaStudy(String name){  
        System.out.println("在家学习" \+ name);  
  }  
  //php学习  
  public void phpStudy(String name){  
        System.out.println("在家学习" \+ name);  
  }  
  //练习吉他  
  public void guitarStudy(String name){  
        System.out.println("在家练习" \+ name);  
  }  
  //练习唱歌  
  public void singStudy(String name){  
        System.out.println("在家练习" \+ name);  
  }  
}

  在上面的示例中我们看到Study类中包含了四个方法,虽然这四个方法都是学习相关的,但是细分的话我们能发现它们的职责还是不那么单一。学习JAVA和PHP,从性质上说它们两个是知识方面的,而练习吉他和唱歌,更偏向于技能和兴趣爱好方面。所以我们需要把它解耦成两个职责单一的类。

/**  
 * Create By Ke Shuiqiang  2020/3/6 15:42 
 * 知识学习 
 */
public class KnowledgeSudy {  
  
  //java学习  
  public void javaStudy(String name){  
        System.out.println("在家学习" + name);  
  }  
  //php学习  
  public void phpStudy(String name){  
        System.out.println("在家学习" + name);  
  }       
}

/**  
 * Create By Ke Shuiqiang  2020/3/6 15:44 
 * 兴趣爱好学习 
 */
public class InterestStudy {  
  
  //练习吉他  
  public void guitarStudy(String name){  
        System.out.println("在家练习" + name);  
  }  
  //练习唱歌  
  public void singStudy(String name){  
        System.out.println("在家练习" + name);  
  }  
}

自律
3 声望2 粉丝