av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

設(shè)計模式6大原則:單一職責原則

單一職責原則(Single Responsibility Principle),簡稱SRP。

定義:

There should never be more than one reason for a class to change.

應(yīng)該有且僅有一個原因引起類的變更。

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

下面是個例子:

 
 
 
  1. package com.loulijun.chapter1;
  2.  
  3. public interface Itutu {
  4.     //身高
  5.     void setShengao(double height);
  6.     double getShengao();
  7.     //體重
  8.     void setTizhong(double weight);
  9.     double getTizhong();
  10.     //吃飯
  11.     boolean chiFan(boolean hungry);
  12.     //上網(wǎng)
  13.     boolean shangWang(boolean silly);
  14. }

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

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

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

 
 
 
  1. package com.loulijun.chapter1;
  2.  
  3. /**
  4.  * BO:Bussiness Object,業(yè)務(wù)對象
  5.  * 負責用戶的屬性
  6.  * @author Administrator
  7.  *
  8.  */
  9. public interface ItutuBO {
  10.     //身高
  11.     void setShengao(double height);
  12.     double getShengao();
  13.     //體重
  14.     void setTizhong(double weight);
  15.     double getTizhong();
  16. }

ItutuBL.java:負責涂涂的行為

 
 
 
  1. package com.loulijun.chapter1;
  2. /**
  3.  * BL:Business Logic,業(yè)務(wù)邏輯
  4.  * 負責用戶的行為
  5.  * @author Administrator
  6.  *
  7.  */
  8. public interface ItutuBL {
  9.     //吃飯
  10.     boolean chiFan(boolean hungry);
  11.     //上網(wǎng)
  12.     boolean shangWang(boolean silly);
  13. }

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

TutuBO.java

 
 
 
  1. package com.loulijun.chapter1;
  2.  
  3. public class TutuBO implements ItutuBO {
  4.     private double height;
  5.     private double weight;
  6.     @Override
  7.     public double getShengao() {       
  8.         return height;
  9.     }
  10.  
  11.     @Override
  12.     public double getTizhong() {
  13.         return weight;
  14.     }
  15.  
  16.     @Override
  17.     public void setShengao(double height) {
  18.         this.height = height;
  19.     }
  20.  
  21.     @Override
  22.     public void setTizhong(double weight) {
  23.         this.weight = weight;
  24.     }
  25.  
  26. }

TutuBL.java

 
 
 
  1. package com.loulijun.chapter1;
  2.  
  3. public class TutuBL implements ItutuBL {
  4.  
  5.     @Override
  6.     public boolean chiFan(boolean hungry) {
  7.         if(hungry)
  8.         {
  9.             System.out.println("去吃火鍋...");
  10.             return true;
  11.         }
  12.         return false;
  13.     }
  14.  
  15.     @Override
  16.     public boolean shangWang(boolean silly) {
  17.         if(silly)
  18.         {
  19.             System.out.println("好無聊啊,上會網(wǎng)...");
  20.             return true;
  21.         }
  22.         return false;
  23.     }
  24.  
  25. }

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

那么單一職責原則的意義何在呢?

  1. 降低類的復雜性,實現(xiàn)什么樣的職責都有清晰的定義
  2. 提高可讀性
  3. 提高可維護性
  4. 降低變更引起的風險,對系統(tǒng)擴展性和維護性很有幫助

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


分享名稱:設(shè)計模式6大原則:單一職責原則
新聞來源:http://uogjgqi.cn/article/ccspecg.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流