程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 簡略講授Java設計形式編程中的單一職責准繩

簡略講授Java設計形式編程中的單一職責准繩

編輯:關於JAVA

簡略講授Java設計形式編程中的單一職責准繩。本站提示廣大學習愛好者:(簡略講授Java設計形式編程中的單一職責准繩)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略講授Java設計形式編程中的單一職責准繩正文


單一職責准繩:一個類,只要一個惹起它變更的緣由。

為何須要單一職責准繩?
假如一個類有多個緣由要去修正它,那末修正一個功效時,能夠會讓其他功效發生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. 當之前寫的類曾經有多個惹起變更的緣由時,我們最好做代碼重構。

然則、應用單一職責准繩有一個成績,“職責”沒有一個明白的劃分尺度,假如把職責劃分的太細的話會招致接口和完成類的數目劇增,反而進步了龐雜度,下降了代碼的可保護性。所以應用這個職責的時刻還要詳細情形詳細剖析。建議就是接口必定要采取單一職責准繩,完成類的設計上盡量做到單一職責准繩,最好是一個緣由惹起一個類的變更。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved