首页 → 名言 → 毅力格言
為什么需要單一職責原則
日期:2023-02-20 13:49:53    编辑:网络投稿    来源:网络资源
為什么需要單一職責原則  單一職責原則:一個類,只有一個引起它變化的原因。  為什么需要單一職責原則?  如果一個類有多個原因要去修改它,那么修改一個功能時,可能會讓其他
为你推荐:
  • 表達單身的句子
  • 為什么需要單一職責原則

      單一職責原則:一個類,只有一個引起它變化的原因。

      為什么需要單一職責原則?

      如果一個類有多個原因要去修改它,那么修改一個功能時,可能會讓其他功能產生Bug,所以一個類最好只有一個職責。但實際應用中還是比較難實現的,我們只能是盡量符合這個原則。

      有時候,開發人員設計接口的時候會有些問題,比如用戶的屬性和用戶的行為被放在一個接口中聲明。這就造成了業務對象和業務邏輯被放在了一起,這樣就造成了這個接口有兩種職責,接口職責不明確,按照SRP的定義就違背了接口的單一職責原則了。

      下面是個例子:

      package com.loulijun.chapter1; public interface Itutu { //身高 void setShengao(double height); double getShengao(); //體重 void setTizhong(double weight); double getTizhong(); //吃飯 boolean chiFan(boolean hungry); //上網 boolean shangWang(boolean silly); }

      上面的例子就存在這個問題,身高、體重屬于業務對象,與之相應的`方法主要負責用戶的屬性。而吃飯、上網是相應的業務邏輯,主要負責用戶的行為。但是這就會給人一種不知道這個接口到底是做什么的感覺,職責不清晰,后期維護的時候也會造成各種各樣的問題。

      解決辦法:單一職責原則,將這個接口分解成兩個職責不同的接口即可

      ItutuBO.java:負責tutu(涂涂,假如是個人名)的屬性

      package com.loulijun.chapter1; /** * BO:Bussiness Object,業務對象 * 負責用戶的屬性 * @author Administrator * */ public interface ItutuBO { //身高 void setShengao(double height); double getShengao(); //體重 void setTizhong(double weight); double getTizhong(); }

      ItutuBL.java:負責涂涂的行為

      package com.loulijun.chapter1; /** * BL:Business Logic,業務邏輯 * 負責用戶的行為 * @author Administrator * */ public interface ItutuBL { //吃飯 boolean chiFan(boolean hungry); //上網 boolean shangWang(boolean silly); }

      這樣就實現了接口的單一職責。那么實現接口的時候,就需要有兩個不同的類

      TutuBO.java

      package com.loulijun.chapter1; public class TutuBO implements ItutuBO { private double height; private double weight; @Override public double getShengao() { return height; } @Override public double getTizhong() { return weight; } @Override public void setShengao(double height) { this.height = height; } @Override public void setTizhong(double weight) { this.weight = weight; } }

      TutuBL.java

      package com.loulijun.chapter1; public class TutuBL implements ItutuBL { @Override public boolean chiFan(boolean hungry) { if(hungry) { System.out.println("去吃火鍋..."); return true; } return false; } @Override public boolean shangWang(boolean silly) { if(silly) { System.out.println("好無聊啊,上會網..."); return true; } return false; } }

      這樣就清晰了,當需要修改用戶屬性的時候只需要對ItutuBO這個接口來修改,只會影響到TutuBO這個類,不會影響其他類。

      總結:

      1. 實際情況是,很多時候我們無法提前預見“引起變化的原因”,所以我們只能憑經驗構造我們的接口,盡量做到一個接口只有一個職責。這里說的是接口,類可能會有繼承和實現多個接口,更加難以實現單一職責。

      2. 當以前寫的類已經有多個引起變化的原因時,我們最好做代碼重構。

      但是、使用單一職責原則有一個問題,“職責”沒有一個明確的劃分標準,如果把職責劃分的太細的話會導致接口和實現類的數量劇增,反而提高了復雜度,降低了代碼的可維護性。所以使用這個職責的時候還要具體情況具體分析。建議就是接口一定要采用單一職責原則,實現類的設計上盡可能做到單一職責原則,最好是一個原因引起一個類的變化。

    【為什么需要單一職責原則】相關文章:

    生活需要簡單一點作文04-21

    雅思寫作需要遵循的原則07-14

    英語口語需要掌握的原則10-11

    跳槽需要遵循的原則有什么12-29

    有關制定崗位職責的原則10-09

    考研數學需要掌握哪些做題原則11-24

    考研擇校前需要關注的原則11-23

    考研初期備考需要把握的原則12-28

    考研數學沖刺復習需要堅持的原則12-28

    这里有更多你想看的
  • 33條關于各自努力頂
    • 本类最新
    • 精品图文
    • 时尚
    • 新闻
    • 生活
    • 视觉
    • 微爱
      栏目ID=88的表不存在(操作类型=0)

    头条推荐

    热门推荐

    特别推荐

    返回顶部