单一职责原则(六大规则中的小萝莉,人见人爱):描述的意思是每个类都只负责单一的功能,切不可太多,并且一个类应当尽量的把一个功能做到极致。
否则当你去维护这个系统的时候,你会后悔你当初的决定,下面是我自己思索的例子,给各位参考一下,给出代码。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Calculator {
public int add() throws NumberFormatException, IOException{
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 NumberFormatException, IOException {
Calculator calculator = new Calculator();
System.out.println("result:" + calculator.add());
}
}
来看上面这个例子,这个方法的作用是从一个文件中读出两个数,并返回它们的和,我相信各位也能看出当中有明显的多职责问题。如果没看出来的话,我想问各位一句,如果我想算这个文件中两个数字的差该如何做?
相信答案应该是我COPY出来一个div方法,把最后的加号改成减号。好吧,那我要除法呢?乘法呢?取模呢?COPY四次吗。这就造成了很多很多的代码重复,这不符合系统设计的规则。下面我把上述程序改善一下。
我们分离出来一个类用来读取数据,来看Reader。
package com.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Reader {
int a,b;
public Reader(String path) throws NumberFormatException, IOException{
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;
}
}
下面是我们单独的计算器类。
package com.test;
import java.io.IOException;
public class Calculator {
public int add(int a,int b){
return a + b;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Reader reader = new Reader("E:/data.txt");
Calculator calculator = new Calculator();
System.out.println("result:" + calculator.add(reader.getA(),reader.getB()));
}
}
我们将一个类拆成了两个类,这样以后我们如果有减法,乘法等等,就不用出现那么多重复代码了。
以上是我临时杜撰的例子,虽然很简单,并且没有什么现实意义,但是我觉得足够表达单一职责的意思,并且也足够说明它的重要性。单一职责原则是我觉得六大原则当中最应该遵守的原则,因为我在实践过程中发现,当你在项目的开发过程中遵循它,几乎完全不会给你的系统造成任何多余的复杂性,反而会令你的程序看起来井然有序。