概念:就一個類而言,應該僅有一個引起它變化的原因 描述的意思是每個類都只負責單一的功能,切不可太多,並且一個類應當儘量的把一個功能做到極致。如果一個類承擔的職責過多,就等於把這些職責耦合在一起,這種耦合會導致脆弱的設計,即當其中一個職責發生變化時將會影響這個類完成其它職責的功能。以下代碼就沒有遵守該 ...
概念:就一個類而言,應該僅有一個引起它變化的原因
描述的意思是每個類都只負責單一的功能,切不可太多,並且一個類應當儘量的把一個功能做到極致。如果一個類承擔的職責過多,就等於把這些職責耦合在一起,這種耦合會導致脆弱的設計,即當其中一個職責發生變化時將會影響這個類完成其它職責的功能。以下代碼就沒有遵守該原則
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())); } }
將職責拆分後當我們需要多個運算時就不會出現重覆編寫讀取文件的代碼。
以上例子是出自左瀟龍的博客,單一職責原則是我覺得六大原則當中最應該遵守的原則,在項目的開發過程中遵循它,減少大量重覆的代碼不會增加項目的複雜性,反而會令你的程式看起來井然有序。
總結:在開發過程中當發現有多於一個的動機會去改變一個類,那這個類就具有了多於一個的職責,就需要我們考慮對該類的職責進行分離。