欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

定義:客戶端不應(yīng)該依賴它不需要的接口;一個(gè)類對另一個(gè)類的依賴應(yīng)該建立在最小的接口上。
問題由來:類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對于類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是對類A依賴的實(shí)現(xiàn)。類C依賴接口I中的方法1、方法4、方法5,類D是對類C依賴的實(shí)現(xiàn)。對于類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)不對應(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反射機(jī)制根據(jù)屬性名獲取屬性值的操作

    java反射機(jī)制根據(jù)屬性名獲取屬性值的操作

    這篇文章主要介紹了java反射機(jī)制根據(jù)屬性名獲取屬性值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java執(zhí)行cmd命令兩種實(shí)現(xiàn)方法解析

    Java執(zhí)行cmd命令兩種實(shí)現(xiàn)方法解析

    這篇文章主要介紹了Java執(zhí)行cmd命令兩種實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 解決ThreadLocal獲取不到值大坑

    解決ThreadLocal獲取不到值大坑

    這篇文章主要介紹了解決ThreadLocal獲取不到值大坑
    2023-05-05
  • servlet上傳文件實(shí)現(xiàn)代碼詳解(四)

    servlet上傳文件實(shí)現(xiàn)代碼詳解(四)

    這篇文章主要為大家詳細(xì)介紹了servlet上傳文件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Mac下用Java調(diào)用c/c++的思路詳解

    Mac下用Java調(diào)用c/c++的思路詳解

    這篇文章主要介紹了Mac下用Java調(diào)用c/c++的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • java中Scanner輸入用法實(shí)例

    java中Scanner輸入用法實(shí)例

    Java的Scanner用法,主要用于算法筆試時(shí)的控制臺(tái)輸入,下面這篇文章主要給大家介紹了關(guān)于java中Scanner輸入用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java中的異步非阻塞AIO模型詳解

    Java中的異步非阻塞AIO模型詳解

    這篇文章主要介紹了Java中的異步非阻塞AIO模型詳解,AIO需要操作系統(tǒng)的支持,在linux內(nèi)核2.6版本中加入了對真正異步IO的支持,java從jdk1.7開始支持AIO,本文提供了部分實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • 詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對比

    詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對比

    這篇文章主要介紹了詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • springboot集成PageHelper分頁失效的原因及解決

    springboot集成PageHelper分頁失效的原因及解決

    項(xiàng)目啟動(dòng)初期,在集成mybatis的分頁插件,自定義封裝了一個(gè)分頁的工具類,方便后期項(xiàng)目的擴(kuò)展,結(jié)果無法分頁了,怎么設(shè)置搞都沒辦法正常分頁,所以本文將給大家介紹一下springboot集成PageHelper分頁失效的原因及解決,需要的朋友可以參考下
    2023-10-10
  • mybatis調(diào)用mysql存儲(chǔ)過程(返回參數(shù),單結(jié)果集,多結(jié)果集)

    mybatis調(diào)用mysql存儲(chǔ)過程(返回參數(shù),單結(jié)果集,多結(jié)果集)

    本文主要介紹了mybatis調(diào)用mysql存儲(chǔ)過程(返回參數(shù),單結(jié)果集,多結(jié)果集),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論