概念:就一个类而言,应该仅有一个引起它变化的原因
描述的意思是每个类都只负责单一的功能,切不可太多,并且一个类应当尽量的把一个功能做到极致。如果一个类承担的职责过多,就等于把这些职责耦合在一起,这种耦合会导致脆弱的设计,即当其中一个职责发生变化时将会影响这个类完成其它职责的功能。以下代码就没有遵守该原则
public class Calculator { public int add() throws Exception{ File file = new File("E:/data.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); int a = Integer.valueOf(br.readLine()); int b = Integer.valueOf(br.readLine()); return a+b; } public static void main(String[] args) throws Exception { Calculator calculator = new Calculator(); System.out.println("result:" + calculator.add()); } }
例子中的add方法拥有从文件中读取数字和对数字进行加法运算的职责。这将会导致我们若想增加一个减法运算的功能还得copy读取文件职责,当运算增加时,将会照成大量重复的代码。我们用两个类来实现这两个职责。
用来读取文件数据的类,如下代码所示
public class Reader { int a,b; public Reader(String path) throws Exception{ BufferedReader br = new BufferedReader(new FileReader(new File(path))); a = Integer.valueOf(br.readLine()); b = Integer.valueOf(br.readLine()); } public int getA(){ return a; } public int getB(){ return b; } }
用来进行运算的类,代码如下所示
public class Calculator { public int add(int a,int b){ return a + b; } public static void main(String[] args) throws Exception { Reader reader = new Reader("E:/data.txt"); Calculator calculator = new Calculator(); System.out.println("result:" + calculator.add(reader.getA(),reader.getB())); } }
将职责拆分后当我们需要多个运算时就不会出现重复编写读取文件的代码。
以上例子是出自左潇龙的博客,单一职责原则是我觉得六大原则当中最应该遵守的原则,在项目的开发过程中遵循它,减少大量重复的代码不会增加项目的复杂性,反而会令你的程序看起来井然有序。
总结:在开发过程中当发现有多于一个的动机会去改变一个类,那这个类就具有了多于一个的职责,就需要我们考虑对该类的职责进行分离。