1. 程式人生 > 其它 >設計模式(1):JAVA(1):軟體設計原則(1)單一職責:每個類或每個方法每個框架只做一件事

設計模式(1):JAVA(1):軟體設計原則(1)單一職責:每個類或每個方法每個框架只做一件事

單一職責:每個類或每個方法每個框架只做一件事

反例:統計文字檔案中有多少個單詞

     public static void main(String[] args) {
        try {
            //=========================負責載入路徑下的檔案
            Reader in = new FileReader("F:\\1.txt");
            BufferedReader br = new BufferedReader(in);
            String line = null;
            StringBuilder sb 
= new StringBuilder(""); while ((line =br.readLine())!=null){ sb.append(line); sb.append(""); } //==========================負責根據正則分割字串 String [] words = sb.toString().split("[^a-zA-Z]+"); System.out.println(words.length); br.close(); }
catch (IOException e) { e.printStackTrace(); }

上面的寫法就違反了單一職責,同一個main方法中,我們即讓它去載入檔案,也讓它去做分割,這樣做的壞處是,每當我們需要呼叫其中的一個功能時(如我有檔案只需要分割),仍需要重寫一遍。

正例

   //==============只負責根據路徑載入檔案
    public  String loadFile(String path) throws IOException {
        Reader in = new FileReader(path);
        BufferedReader br 
= new BufferedReader(in); String line = null; StringBuilder sb = new StringBuilder(""); while ((line = br.readLine()) != null) { sb.append(line); sb.append(""); } br.close(); return sb.toString(); } //=========只負責字串根據正則分割 public int Textlength(String sb, String regex){ String [] words = sb.split(regex); return words.length; } public static void main(String[] args) throws IOException { String str = loadFile("F:\\1.txt"); String regex ="[^a-zA-Z]+"; System.out.println(Textlength(str,regex)); }

通過單一職責,可以提高程式碼的重用性,通過單一職責的方法得到的資料我們不再有耦合,拿來可以做的事也不再侷限。

本文來自部落格園,作者:秋華,轉載請註明原文連結:https://www.cnblogs.com/qiu-hua/p/15227057.html