最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單講解Java設(shè)計(jì)模式編程中的單一職責(zé)原則

 更新時(shí)間:2016年02月14日 09:35:36   作者:lixiang0522  
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的單一職責(zé)原則,這在團(tuán)隊(duì)開發(fā)編寫接口時(shí)經(jīng)常使用這樣的約定,需要的朋友可以參考下

單一職責(zé)原則:一個(gè)類,只有一個(gè)引起它變化的原因。

為什么需要單一職責(zé)原則?
如果一個(gè)類有多個(gè)原因要去修改它,那么修改一個(gè)功能時(shí),可能會(huì)讓其他功能產(chǎn)生Bug,所以一個(gè)類最好只有一個(gè)職責(zé)。但實(shí)際應(yīng)用中還是比較難實(shí)現(xiàn)的,我們只能是盡量符合這個(gè)原則。

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

下面是個(gè)例子:

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

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

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

ItutuBO.java:負(fù)責(zé)tutu(涂涂,假如是個(gè)人名)的屬性

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

ItutuBL.java:負(fù)責(zé)涂涂的行為

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

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

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("好無聊啊,上會(huì)網(wǎng)..."); 
      return true; 
    } 
    return false; 
  } 
  
} 

這樣就清晰了,當(dāng)需要修改用戶屬性的時(shí)候只需要對(duì)ItutuBO這個(gè)接口來修改,只會(huì)影響到TutuBO這個(gè)類,不會(huì)影響其他類。

總結(jié):
1. 實(shí)際情況是,很多時(shí)候我們無法提前預(yù)見“引起變化的原因”,所以我們只能憑經(jīng)驗(yàn)構(gòu)造我們的接口,盡量做到一個(gè)接口只有一個(gè)職責(zé)。這里說的是接口,類可能會(huì)有繼承和實(shí)現(xiàn)多個(gè)接口,更加難以實(shí)現(xiàn)單一職責(zé)。
2. 當(dāng)以前寫的類已經(jīng)有多個(gè)引起變化的原因時(shí),我們最好做代碼重構(gòu)。

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

相關(guān)文章

  • Spring事務(wù)處理原理步驟詳解

    Spring事務(wù)處理原理步驟詳解

    這篇文章主要介紹了Spring事務(wù)處理原理步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 深入淺析 Spring Security 緩存請(qǐng)求問題

    深入淺析 Spring Security 緩存請(qǐng)求問題

    這篇文章主要介紹了 Spring Security 緩存請(qǐng)求問題,本文通過實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-04-04
  • 詳解Java編程中面向字符的輸出流

    詳解Java編程中面向字符的輸出流

    這篇文章主要介紹了Java編程中面向字符的輸出流,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Spring-boot 中@Async使用遇到的坑

    Spring-boot 中@Async使用遇到的坑

    這篇文章主要介紹了Spring-boot 中@Async使用的坑,首先使用@Async 需要在Spring啟動(dòng)類上添加注解@EnableAsyn或者在你們線程池配置類添加@EnableAsyn,需要的朋友可以參考下
    2024-01-01
  • java中InputStream獲取字節(jié)大小相關(guān)方法詳解

    java中InputStream獲取字節(jié)大小相關(guān)方法詳解

    這篇文章主要給大家介紹了關(guān)于java中InputStream獲取字節(jié)大小相關(guān)方法的相關(guān)資料,在Java中要實(shí)現(xiàn)讀取文件大小,可以使用InputStream來讀取文件的內(nèi)容,并通過獲取讀取的字節(jié)數(shù)來得到文件的大小,需要的朋友可以參考下
    2023-11-11
  • Spring?注入靜態(tài)對(duì)象使用三種方式示例

    Spring?注入靜態(tài)對(duì)象使用三種方式示例

    這篇文章主要為大家介紹了Spring注入靜態(tài)對(duì)象使用的三種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • java讀寫ini文件、FileOutputStream問題

    java讀寫ini文件、FileOutputStream問題

    這篇文章主要介紹了java讀寫ini文件、FileOutputStream問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 如果淘寶的七天自動(dòng)確認(rèn)收貨讓你設(shè)計(jì)你用Java怎么實(shí)現(xiàn)

    如果淘寶的七天自動(dòng)確認(rèn)收貨讓你設(shè)計(jì)你用Java怎么實(shí)現(xiàn)

    在面試的時(shí)候如果面試官問淘寶的七天自動(dòng)確認(rèn)收貨讓你設(shè)計(jì),你會(huì)怎么具體實(shí)現(xiàn)呢?跟著小編看一下下邊的實(shí)現(xiàn)過程,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • Java中四種訪問權(quán)限資料整理

    Java中四種訪問權(quán)限資料整理

    這篇文章主要介紹了 Java中四種訪問權(quán)限總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java private修飾符失效的原因

    Java private修飾符失效的原因

    在Java編程里,使用private關(guān)鍵字修飾了一個(gè)成員,只有成員內(nèi)部可以訪問,其余成員都不可訪問,今天說明一下private功能失效的問題。
    2020-10-10

最新評(píng)論

探索| 奉节县| 东台市| 洞头县| 石台县| 中卫市| 福建省| 额济纳旗| 浑源县| 湟中县| 神池县| 五大连池市| 通化县| 承德市| 浠水县| 德昌县| 仪征市| 陆川县| 常山县| 九龙城区| 双桥区| 浮山县| 潞西市| 沁水县| 江山市| 昆明市| 青阳县| 苍溪县| 定西市| 龙游县| 威宁| 泰来县| 泗水县| 临澧县| 杭锦旗| 澄迈县| 哈巴河县| 双流县| 苍梧县| 滨州市| 宿迁市|