• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            為生存而奔跑

               :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

            留言簿(5)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            積分與排名

            • 積分 - 326906
            • 排名 - 74

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            類適配器
            客戶的開發(fā)人員定義了一個(gè)接口,期望用這個(gè)接口來完成整數(shù)的求和操作,接口定義如下:
            Java代碼
            1. public interface Operation{  
            2.       public int add(int a,int b);  
            3. }  

            開發(fā)人員在了解這個(gè)接口的定義后,發(fā)現(xiàn)一個(gè)第三方類,里面有一個(gè)方法能實(shí)現(xiàn)他們期望的功能,其代碼如下:
            Java代碼
            1. public class OtherOperation{  
            2.       public int otherAdd(int a,int b){  
            3.            return a + b;  
            4.       }  
            5. }  

            以上第三方類OtherOperation的方法public int otherAdd(int a,int b)所提供的功能,完全能符合客戶的期望,所以只需要想辦法把OtherOperationotherAdd(int a,int b)和客戶的Operation接口聯(lián)系起來,讓這個(gè)第三方類來為客戶提供他們期望的服務(wù)就行了,這樣就避免了開發(fā)人員再度去研究類似OtherOperationotherAdd(int a,int b)方法的實(shí)現(xiàn)(利用已有的輪子,避免重復(fù)發(fā)明),這方法之一,就是用適配器模式:
            Java代碼
            1. public class AdapterOperation extends OtherOperation implements Operation{  
            2.       public int add(int a,int b){  
            3.            return otherAdd(a,b);  
            4.       }  
            5. }  

            以上就是適配器的實(shí)現(xiàn)方法之一,類適配器,在以上實(shí)現(xiàn)中存在著三中角色分別是:
            1:適配目標(biāo)角色:Operation。
            2:適配類(原)角色:OtherOperation。
            3:適配器角色:AdapterOperation。
            其中適配器角色是適配器模式的核心。
            適配器的主要工作就是通過封裝現(xiàn)有的功能,使他滿足需要的接口。

            對(duì)象適配器
            我們?cè)賮砜纯戳硪环N情況:
            假如客戶接口期望的功能不止一個(gè),而是多個(gè):
            Java代碼
            1. public interface Operation{  
            2.       public int add(int a,int b);  
            3.       public int minus(int a,int b);  
            4.       public int multiplied(int a,int b);  
            5. }  

            而能提供這些實(shí)現(xiàn)的原可能不止一個(gè):
            Java代碼
            1. public class OtherAdd{  
            2.       public int otherAdd(int a,int b){  
            3.            return a + b;  
            4.       }  
            5. }  
            6.   
            7. public class OtherMinus{  
            8.       public int minus(int a,int b){  
            9.            return a - b;  
            10.       }  
            11. }  
            12.   
            13. public class OtherMultiplied{  
            14.       public int multiplied(int a,int b){  
            15.            return a * b;  
            16.       }  
            17. }  

            由于java是不能實(shí)現(xiàn)多繼承的,所以我們不能通過構(gòu)建一個(gè)適配器,讓他來繼承所有原以完成我們的期望,這時(shí)候怎么辦呢?只能用適配器的另一種實(shí)現(xiàn)--對(duì)象適配器
            Java代碼
            1. public class AdapterOperation implements Operation{  
            2.       private OtherAdd add;  
            3.       private OtherMinus minus;  
            4.       private OtherMultiplied multiplied;  
            5.   
            6.       public void setAdd(OtherAdd add){  
            7.             this.add = add;  
            8.       }  
            9.   
            10.       public void setMinus(OtherMinus minus){  
            11.             this.minus = minus;  
            12.       }  
            13.   
            14.       public void setMultiplied(OtherMultiplied multiplied){  
            15.             this.multiplied = multiplied;  
            16.       }  
            17.   
            18.       //適配加法運(yùn)算  
            19.       public int add(int a,int b){  
            20.            return add.otherAdd(a,b);  
            21.       }  
            22.   
            23.       //適配減法運(yùn)算  
            24.       public int minus(int a,int b){  
            25.           return minus.minus(a,b);  
            26.       }  
            27.   
            28.       //適配乘法運(yùn)算  
            29.       public int multiplied(int a,int b){  
            30.          return multiplied.multiplied(a,b);  
            31.       }  
            32. }  

            上面代碼很明顯,適配器并不是通過繼承來獲取適配類(原)的功能的,而是通過適配類的對(duì)象來獲取的,這就解決了java不能多繼承所帶來的不便了。這也是java提倡的編程思想之一,即盡量使用聚合不要使用繼承
            還有一種情況是需要使用對(duì)象適配器的。我們來看看,
            單我們的客戶提供的需求并不是一個(gè)明確的接口,而是一個(gè)類,并沒有定義期望的方法,如下
            Java代碼
            1. public class A{  
            2.    public int add(int a,int b){  
            3.       return a + b;  
            4.    }  
            5. }  

            現(xiàn)在客戶要一個(gè)新類B,要求能在保留類A功能的情況下增加一個(gè)運(yùn)算減法的功能,并要求B能隨時(shí)替換掉A但不能對(duì)已有系統(tǒng)造成影響。這樣我們只能新建一個(gè)類B,并讓B繼承A。
            Java代碼
            1. public class B extends A{  
            2.     b(){  
            3.       super();  
            4.     }  
            5.   
            6.     public int minus(int a,int b){  
            7.            //待實(shí)現(xiàn)的減法運(yùn)算函數(shù)..  
            8.     }  
            9. }  

            這時(shí)候,我們發(fā)現(xiàn)類C已經(jīng)提供了實(shí)現(xiàn)減法的函數(shù),
            Java代碼
            1. public class C{  
            2.     public int minus(int a,int b){  
            3.            return a - b;  
            4.     }  
            5. }  

            為了避免重復(fù)去設(shè)計(jì)該函數(shù),我們決定引入C類,通過適配C類來達(dá)到我們的期望,但問題是A和C都是一個(gè)具體類,我們無法讓B同時(shí)繼承這個(gè)兩個(gè)類,而B繼承A又是必須的,所以我們只能考慮把C給內(nèi)聚到B內(nèi)部,對(duì)象適配器又得派上用場(chǎng)了。
            Java代碼
            1. public class B extends A{  
            2.   
            3.     private C c;  
            4.   
            5.     B(){  
            6.       super();  
            7.     }  
            8.   
            9.     public void setMinus(C c){  
            10.          this.c= c;  
            11.     }  
            12.   
            13.     public int minus(int a,int b){  
            14.            return c.minus(a,b);  
            15.     }  
            16. }  

            這樣,在需要A類的地方都能用B類來代替,同時(shí)又保證了新的功能的引入。

            更靈活的實(shí)現(xiàn)--隱藏目標(biāo)接口的抽象適配器

            做java 桌面應(yīng)用的都知道WindowListener接口,
            Java代碼
            1. public interface WindowListener extends EventListener{  
            2.  public void windowActivated(WindowEvent e);  
            3.  public void windowClosed(WindowEvent e);  
            4.  public void windowClosing(WindowEvent e);  
            5.  public void windowDeactivated(WindowEvent e);  
            6.  public void windowDeiconified(WindowEvent e);  
            7.  public void windowIconified(WindowEvent e);  
            8.  public void windowOpened(WindowEvent e);  
            9. }  

            要實(shí)現(xiàn)這個(gè)接口,我們就必須實(shí)現(xiàn)它所定義的所有方法,但是實(shí)際上,我們很少需要同時(shí)用到所有的方法,我們要的只是其中的兩三個(gè)。為了不使我們實(shí)現(xiàn)多余的方法,
            jdk WindowListener提供了一個(gè)WindowListener的默認(rèn)實(shí)現(xiàn)類WindowAdapter類,這是一個(gè)抽象類,
            Java代碼
            1. public abstract class WindowAdapter implements WindowListener{  
            2.  public void windowActivated(WindowEvent e){}  
            3.  public void windowClosed(WindowEvent e){}  
            4.  public void windowClosing(WindowEvent e){}  
            5.  public void windowDeactivated(WindowEvent e){}  
            6.  public void windowDeiconified(WindowEvent e){}  
            7.  public void windowIconified(WindowEvent e){}  
            8.  public void windowOpened(WindowEvent e){}  

            posted on 2009-11-28 16:20 baby-fly 閱讀(283) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Design Pattern
            日韩一区二区久久久久久| 久久人人爽人人精品视频| 9久久9久久精品| 久久久久无码国产精品不卡| 伊人久久大香线蕉av一区| 26uuu久久五月天| 中文字幕久久波多野结衣av| 精品视频久久久久| 久久无码人妻一区二区三区| 欧美一级久久久久久久大片| 久久99国产亚洲高清观看首页| 久久久黄色大片| 99久久精品国产一区二区三区| 香蕉久久av一区二区三区 | 久久发布国产伦子伦精品| 久久99精品久久久久久不卡| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久久中文字幕日本| 久久精品国产99国产电影网| 欧洲精品久久久av无码电影| 久久99热这里只有精品66| 久久乐国产精品亚洲综合| 7国产欧美日韩综合天堂中文久久久久 | 欧美久久综合性欧美| 久久婷婷成人综合色综合| 亚洲乱码精品久久久久..| 久久受www免费人成_看片中文 | 亚洲欧美日韩久久精品| 国产亚州精品女人久久久久久 | 久久婷婷色香五月综合激情 | 国产精品成人久久久久久久| 久久精品成人免费网站| 国产精品久久毛片完整版| 久久国产亚洲高清观看| 精品久久久久久久久午夜福利| 欧美噜噜久久久XXX| 少妇高潮惨叫久久久久久| 亚洲AV无码久久精品成人| 久久精品亚洲一区二区三区浴池 | 国产亚洲色婷婷久久99精品91| 久久综合九色综合精品|