国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
面向?qū)ο蟮脑O(shè)計原則三 - 接口隔離原則 - 森林狼 - JavaEye技術(shù)網(wǎng)站

動機

當(dāng)我們設(shè)計應(yīng)用程序的時候,如果一個模塊包含多個子模塊,那么我們應(yīng)該小心對該模塊做出抽象。設(shè)想該模塊由一個類實現(xiàn),我們可以把系統(tǒng)抽象成一個接口。但是當(dāng)我們想要添加一個新的模塊擴展程序時,如果要添加的模塊只包含原系統(tǒng)中的一些子模塊,那么就會強迫我們實現(xiàn)接口中的所有方法,并且還要編寫一些啞方法。這樣的接口被稱為胖接口或者叫被污染的接口,使用這樣的接口將會給系統(tǒng)引入一些不正確的行為。

 

接口隔離原則表明客戶端不應(yīng)該被強迫實現(xiàn)一些他們不會使用的接口,應(yīng)該把胖接口中的方法分組,然后用多個接口代替它,每個接口服務(wù)于一個子模塊。

 

接口隔離原則 

不應(yīng)該強迫客戶端依賴于他們不會使用的接口。

 

實例

下面是一個違反了接口隔離原則的例子。我們使用Manager類代表一個管理工人的管理者。有兩種類型的工人:普通的和高效的,這兩種工人都需要吃午飯?,F(xiàn)在來了一批機器人,它們同樣為公司工作,但是他們不需要吃午飯。一方面Robot類需要實現(xiàn)IWoker接口,因為他們要工作,另一方面,它們又不需要實現(xiàn)IWorker接口,因為它們不需要吃飯。

 

在這種情況下IWorker就被認(rèn)為是一個被污染了的接口。

 

如果我們保持現(xiàn)在的設(shè)計,那么Robot類將被迫實現(xiàn)eat()方法,我們可以寫一個啞類它什么也不做(比如說它只用一秒鐘的時間吃午飯),但是這會對程序造成不可預(yù)料的結(jié)果(例如管理者看到的報表中顯示被帶走的午餐多于實際的人數(shù))。

 

根據(jù)接口隔離原則,一個靈活的設(shè)計不應(yīng)該包含被污染的接口。對于我們的例子來說,我們應(yīng)該把IWorker分離成2個接口。

Java代碼
  1. // interface segregation principle - bad example   
  2.   
  3. interface IWorker {   
  4.     public void work();   
  5.   
  6.     public void eat();   
  7. }   
  8.   
  9. class Worker implements IWorker {   
  10.     public void work() {    
  11.         // ....working   
  12.     }   
  13.   
  14.     public void eat() {    
  15.         // ...... eating in launch break   
  16.     }   
  17. }   
  18.   
  19. class SuperWorker implements IWorker{      
  20.     public void work() {           
  21.         //.... working much more       
  22.     }      
  23.        
  24.     public void eat() {        
  25.         //.... eating in launch break      
  26.     }   
  27. }   
  28.            
  29. class Manager {    
  30.     IWorker worker;    
  31.        
  32.     public void setWorker(IWorker w) {    
  33.         worker=w;   
  34.     }    
  35.        
  36.     public void manage() {   
  37.         worker.work();    
  38.     }   
  39. }  

 

 

下面是遵循接口隔離原則的代碼。通過把IWorker分離成兩個接口,Robot類不需要再被強迫實現(xiàn)eat()方法。如果我們需要為Robot類添加其他的功能,例如重新充電,我們可以創(chuàng)建一個新的IRechargeable接口,其中包含一個重新充電的方法recharge。

Java代碼
  1. //interface segregation principle - good example   
  2.   
  3. interface IWorkable {      
  4.     public void work();   
  5. }   
  6.   
  7. interface IFeedable{   
  8.     public void eat();   
  9. }   
  10.   
  11. class Worker implements IWorkable, IFeedable {     
  12.     public void work() {           
  13.         // ....working     
  14.     }      
  15.        
  16.     public void eat() {        
  17.         //.... eating in launch break      
  18.     }   
  19. }   
  20.   
  21. class SuperWorker implements IWorkable, IFeedable{     
  22.     public void work() {           
  23.         //.... working much more       
  24.     }      
  25.        
  26.     public void eat() {        
  27.         //.... eating in launch break      
  28.     }   
  29. }   
  30.   
  31. class Robot implements IWorkable{      
  32.     public void work() {           
  33.     // ....working     
  34.     }   
  35. }   
  36.   
  37. class Manager {   
  38.     IWorkable worker;   
  39.   
  40.     public void setWorker(IWorkable w) {   
  41.         worker = w;   
  42.     }   
  43.   
  44.     public void manage() {   
  45.         worker.work();   
  46.     }   
  47. }  

 

 

總結(jié)

如果已經(jīng)設(shè)計成了胖接口,可以使用適配器模式隔離它。

像其他設(shè)計原則一樣,接口隔離原則需要額外的時間和努力,并且會增加代碼的復(fù)雜性,但是可以產(chǎn)生更靈活的設(shè)計。如果我們過度的使用它將會產(chǎn)生大量的包含單一方法的接口,所以需要根據(jù)經(jīng)驗并且識別出那些將來需要擴展的代碼來使用它。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java程序員必備的基礎(chǔ)知識_java面向?qū)ο笾^承(一)
對于面向?qū)ο笾卸鄳B(tài)的理解
java線程管理利器:java.util.current的用法舉例
Java設(shè)計模式之003--工廠模式
C#易混淆概念-接口
設(shè)計模式學(xué)習(xí)筆記(一)——面向?qū)ο笤O(shè)計模式與原則
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服