• <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)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 328435
            • 排名 - 74

            最新評論

            閱讀排行榜

            評論排行榜

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

            開發(fā)人員在了解這個接口的定義后,發(fā)現(xiàn)一個第三方類,里面有一個方法能實現(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)系起來,讓這個第三方類來為客戶提供他們期望的服務(wù)就行了,這樣就避免了開發(fā)人員再度去研究類似OtherOperationotherAdd(int a,int b)方法的實現(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. }  

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

            對象適配器
            我們再來看看另一種情況:
            假如客戶接口期望的功能不止一個,而是多個:
            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. }  

            而能提供這些實現(xiàn)的原可能不止一個:
            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是不能實現(xiàn)多繼承的,所以我們不能通過構(gòu)建一個適配器,讓他來繼承所有原以完成我們的期望,這時候怎么辦呢?只能用適配器的另一種實現(xiàn)--對象適配器
            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.       //適配加法運算  
            19.       public int add(int a,int b){  
            20.            return add.otherAdd(a,b);  
            21.       }  
            22.   
            23.       //適配減法運算  
            24.       public int minus(int a,int b){  
            25.           return minus.minus(a,b);  
            26.       }  
            27.   
            28.       //適配乘法運算  
            29.       public int multiplied(int a,int b){  
            30.          return multiplied.multiplied(a,b);  
            31.       }  
            32. }  

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

            現(xiàn)在客戶要一個新類B,要求能在保留類A功能的情況下增加一個運算減法的功能,并要求B能隨時替換掉A但不能對已有系統(tǒng)造成影響。這樣我們只能新建一個類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.            //待實現(xiàn)的減法運算函數(shù)..  
            8.     }  
            9. }  

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

            為了避免重復(fù)去設(shè)計該函數(shù),我們決定引入C類,通過適配C類來達(dá)到我們的期望,但問題是A和C都是一個具體類,我們無法讓B同時繼承這個兩個類,而B繼承A又是必須的,所以我們只能考慮把C給內(nèi)聚到B內(nèi)部,對象適配器又得派上用場了。
            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類來代替,同時又保證了新的功能的引入。

            更靈活的實現(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. }  

            要實現(xiàn)這個接口,我們就必須實現(xiàn)它所定義的所有方法,但是實際上,我們很少需要同時用到所有的方法,我們要的只是其中的兩三個。為了不使我們實現(xiàn)多余的方法,
            jdk WindowListener提供了一個WindowListener的默認(rèn)實現(xiàn)類WindowAdapter類,這是一個抽象類,
            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 閱讀(288) 評論(0)  編輯 收藏 引用 所屬分類: Design Pattern
            人妻中文久久久久| 97久久精品国产精品青草| a级成人毛片久久| 久久久一本精品99久久精品66| 亚洲国产成人久久综合野外| 色综合久久久久网| 中文精品久久久久国产网址| 婷婷综合久久中文字幕| 久久久久免费精品国产| 精品一久久香蕉国产线看播放| 久久se这里只有精品| 日韩十八禁一区二区久久| 亚洲国产小视频精品久久久三级 | 97精品国产97久久久久久免费| 久久天天躁狠狠躁夜夜不卡 | 日本五月天婷久久网站| 久久这里只精品99re66| 久久精品国产亚洲αv忘忧草 | 久久99热这里只有精品国产| 久久青青草原精品国产| 精品久久香蕉国产线看观看亚洲| 2021国产成人精品久久| 亚洲国产一成久久精品国产成人综合| 久久精品国产久精国产果冻传媒| 久久国产色AV免费看| 国产精品狼人久久久久影院| 亚洲国产精品嫩草影院久久 | 国产∨亚洲V天堂无码久久久| 国产精品美女久久久免费| 久久受www免费人成_看片中文| 久久AV高清无码| 思思久久好好热精品国产| 久久96国产精品久久久| 一97日本道伊人久久综合影院| 2020久久精品国产免费| 亚洲国产成人精品女人久久久 | 99精品国产综合久久久久五月天 | 亚洲精品白浆高清久久久久久| 国产叼嘿久久精品久久| 久久综合给合久久国产免费| 久久久精品波多野结衣|