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

簡(jiǎn)單理解遵循接口隔離原則的Java設(shè)計(jì)模式編程

 更新時(shí)間:2016年02月03日 11:55:38   作者:lixiang0522  
這篇文章主要介紹了遵循接口隔離原則的Java設(shè)計(jì)模式編程,針對(duì)Java編程中interface接口方面的編寫進(jìn)行約束,需要的朋友可以參考下

定義:客戶端不應(yīng)該依賴它不需要的接口;一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。
問題由來:類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對(duì)于類A和類B來說不是最小接口,則類B和類D必須去實(shí)現(xiàn)他們不需要的方法。
解決方案:將臃腫的接口I拆分為獨(dú)立的幾個(gè)接口,類A和類C分別與他們需要的接口建立依賴關(guān)系。也就是采用接口隔離原則。
舉例來說明接口隔離原則:

201623115321799.jpg (514×337)

 這個(gè)圖的意思是:類A依賴接口I中的方法1、方法2、方法3,類B是對(duì)類A依賴的實(shí)現(xiàn)。類C依賴接口I中的方法1、方法4、方法5,類D是對(duì)類C依賴的實(shí)現(xiàn)。對(duì)于類B和類D來說,雖然他們都存在著用不到的方法(也就是圖中紅色字體標(biāo)記的方法),但由于實(shí)現(xiàn)了接口I,所以也必須要實(shí)現(xiàn)這些用不到的方法。

我們首先先看一個(gè)違反接口隔離的例子:

public interface IWorker { 
  public void work(); 
  public void eat(); 
} 
 
public class Worker implements IWorker{ 
  @Override 
  public void work() { 
    // TODO 工人工作   
  } 
 
  @Override 
  public void eat() { 
    // TODO 工人吃飯 
  } 
} 
 
public class Robot implements IWorker { 
  @Override 
  public void work() { 
    // TODO 機(jī)器人工作     
  } 
 
  @Override 
  public void eat() { 
    // TODO 機(jī)器人吃飯?  
  } 
} 


由于機(jī)器人是不需要吃飯的,所以IWorker被認(rèn)為是一個(gè)臃腫的接口,當(dāng)然你也可以在Robot類中的eat方法做空實(shí)現(xiàn),但是這樣可能會(huì)產(chǎn)生不可預(yù)計(jì)的BUG,比如eat方法需要消耗盒飯數(shù)量的話,就會(huì)出現(xiàn)不對(duì)應(yīng)的現(xiàn)象。
下面是修改后的實(shí)現(xiàn):

public interface IWorker { 
  public void work(); 
} 
 
public interface IDiet { 
  public void eat(); 
} 
 
public class Worker implements IWorker, IDiet{ 
  @Override 
  public void work() { 
    // TODO 工人工作   
  } 
 
  @Override 
  public void eat() { 
    // TODO 工人吃飯 
  } 
} 
 
public class Robot implements IWorker { 
  @Override 
  public void work() { 
    // TODO 機(jī)器人工作     
  } 
} 


總結(jié):
1. 接口要盡量小,并高內(nèi)聚,不過要適當(dāng),太細(xì)化不好維護(hù)。
2. 如果已經(jīng)設(shè)計(jì)成了臃腫的接口,可以使用適配器模式隔離它。

相關(guān)文章

  • Java web項(xiàng)目中的強(qiáng)制登錄功能實(shí)現(xiàn)代碼

    Java web項(xiàng)目中的強(qiáng)制登錄功能實(shí)現(xiàn)代碼

    本文給大家分享Java web項(xiàng)目中的強(qiáng)制登錄功能實(shí)現(xiàn)代碼,為了避免直接進(jìn)入項(xiàng)目中存在的頁面,使用filter過濾器,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • Java實(shí)現(xiàn)插入排序,希爾排序和歸并排序

    Java實(shí)現(xiàn)插入排序,希爾排序和歸并排序

    這篇文章主要為大家詳細(xì)介紹了插入排序,希爾排序和歸并排序的多種語言的實(shí)現(xiàn)(JavaScript、Python、Go語言、Java),感興趣的小伙伴可以了解一下
    2022-12-12
  • java使用FFmpeg提取音頻的實(shí)現(xiàn)示例

    java使用FFmpeg提取音頻的實(shí)現(xiàn)示例

    在Java開發(fā)中,我們經(jīng)常會(huì)遇到需要使用FFmpeg來處理音視頻文件的情況,本文主要介紹了java使用FFmpeg提取音頻的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Java數(shù)據(jù)長(zhǎng)度獲取方式對(duì)比之length屬性、length()和size()方法詳解

    Java數(shù)據(jù)長(zhǎng)度獲取方式對(duì)比之length屬性、length()和size()方法詳解

    在Java編程語言中l(wèi)ength、length()和size()是三個(gè)常見的用來獲取不同數(shù)據(jù)類型對(duì)象長(zhǎng)度或大小的方法,但它們各自適用于不同的上下文,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)長(zhǎng)度獲取方式對(duì)比之length屬性、length()和size()方法詳解
    2024-07-07
  • Java通過反射將 Excel 解析成對(duì)象集合實(shí)例

    Java通過反射將 Excel 解析成對(duì)象集合實(shí)例

    這篇文章主要介紹了Java通過反射將 Excel 解析成對(duì)象集合實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java集成和使用dl4j實(shí)現(xiàn)通過掃描圖片識(shí)別快遞單信息

    Java集成和使用dl4j實(shí)現(xiàn)通過掃描圖片識(shí)別快遞單信息

    這篇文章主要為大家詳細(xì)介紹了Java如何使用DL4J搭建一個(gè)簡(jiǎn)單的圖像識(shí)別模型,并將其集成到Spring?Boot后端中從而實(shí)現(xiàn)通過掃描圖片識(shí)別快遞單信息,需要的可以參考下
    2024-12-12
  • Spring Security自定義異常 AccessDeniedHandler不生效解決方法

    Spring Security自定義異常 AccessDeniedHandler不生效解決方法

    本文主要介紹了Spring Security自定義異常 AccessDeniedHandler不生效解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java異常類型及處理詳情

    Java異常類型及處理詳情

    這篇文章主要介紹了Java異常類型及處理, 異常指的是程序在執(zhí)行過程中,出現(xiàn)了非正常情況,導(dǎo)致了java的jvm停止。感興趣的小伙伴就和小編一起來學(xué)習(xí)下面文章的具體內(nèi)容吧
    2021-09-09
  • JSON.parseObject和JSON.toJSONString實(shí)例詳解

    JSON.parseObject和JSON.toJSONString實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了JSON.parseObject和JSON.toJSONString實(shí)例,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2018-06-06
  • Java實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能的示例代碼

    Java實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)網(wǎng)絡(luò)資源的斷點(diǎn)續(xù)傳功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2022-10-10

最新評(píng)論

柘荣县| 固阳县| 喀喇| 会昌县| 内江市| 舟曲县| 阳朔县| 新昌县| 县级市| 广安市| 会东县| 时尚| 新和县| 余姚市| 海城市| 柏乡县| 迁西县| 天全县| 浪卡子县| 睢宁县| 黎城县| 长顺县| 津市市| 兴山县| 桃源县| 正蓝旗| 红原县| 鸡东县| 雷山县| 定南县| 保山市| 朔州市| 湖南省| 正镶白旗| 岑溪市| 肥东县| 舟曲县| 阿城市| 吴堡县| 永春县| 连州市|