一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java設(shè)計(jì)模式——適配器模式

 醉三郎 2012-06-07

1. 適配器模式簡(jiǎn)介

     適配器模式(Adapter):將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

     適用場(chǎng)景:

     1、已經(jīng)存在的類的接口不符合我們的需求;
     2、創(chuàng)建一個(gè)可以復(fù)用的類,使得該類可以與其他不相關(guān)的類或不可預(yù)見(jiàn)的類(即那些接口可能不一定兼容的類)協(xié)同工作;

     3、在不對(duì)每一個(gè)都進(jìn)行子類化以匹配它們的接口的情況下,使用一些已經(jīng)存在的子類。

     其實(shí)現(xiàn)方式主要有兩種:

     1.類的適配器模式(采用繼承實(shí)現(xiàn))

     2.對(duì)象適配器(采用對(duì)象組合方式實(shí)現(xiàn))

2. 類適配器

      我們生活中常常聽(tīng)到的是電源適配器,它是用于電流變換(整流)的設(shè)備。適配器的存在,就是為了將已存在的東西(接口)轉(zhuǎn)換成適合我們的需要、能被我們所利用。在現(xiàn)實(shí)生活中,適配器更多的是作為一個(gè)中間層來(lái)實(shí)現(xiàn)這種轉(zhuǎn)換作用。

    其中:
    Target
     — 定義Client使用的與特定領(lǐng)域相關(guān)的接口。
    Client
     — 與符合Target接口的對(duì)象協(xié)同。
    Adaptee
     — 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配。
    Adapter
     — 對(duì)Adaptee的接口與Target接口進(jìn)行適配

     在上面的通用類圖中,Cient 類最終面對(duì)的是 Target 接口(或抽象類),它只能夠使用符合這一目標(biāo)標(biāo)準(zhǔn)的子類;而 Adaptee 類則是被適配的對(duì)象(也稱 源角色),因?yàn)樗瑂pecific (特殊的)操作、功能等,所以我們想要在自己的系統(tǒng)中使用它,將其轉(zhuǎn)換成符合我們標(biāo)準(zhǔn)的類,使得 Client 類可以在透明的情況下任意選擇使用 ConcreteTarget 類或是具有特殊功能的 Adatee 類。

     代碼實(shí)現(xiàn)如下:

  1. // 已存在的、具有特殊功能、但不符合我們既有的標(biāo)準(zhǔn)接口的類   
  2. class Adaptee {  
  3.     public void specificRequest() {  
  4.         System.out.println("被適配類具有 特殊功能...");  
  5.     }  
  6. }  
  7.   
  8.   
  9. // 目標(biāo)接口,或稱為標(biāo)準(zhǔn)接口   
  10. interface Target {  
  11.     public void request();  
  12. }  
  13.   
  14. // 具體目標(biāo)類,只提供普通功能   
  15. class ConcreteTarget implements Target {  
  16.     public void request() {  
  17.         System.out.println("普通類 具有 普通功能...");  
  18.     }  
  19. }   
  20.   
  21.   
  22. // 適配器類,繼承了被適配類,同時(shí)實(shí)現(xiàn)標(biāo)準(zhǔn)接口   
  23. class Adapter extends Adaptee implements Target{  
  24.     public void request() {  
  25.         super.specificRequest();  
  26.     }  
  27. }   
  28.   
  29.   
  30. // 測(cè)試類   
  31. public class Client {  
  32.     public static void main(String[] args) {  
  33.         // 使用普通功能類   
  34.         Target concreteTarget = new ConcreteTarget();  
  35.         concreteTarget.request();  
  36.           
  37.         // 使用特殊功能類,即適配類   
  38.         Target adapter = new Adapter();  
  39.         adapter.request();  
  40.     }  
  41. }  
測(cè)試結(jié)果:
普通類 具有 普通功能...
被適配類具有 特殊功能...

     上面這種實(shí)現(xiàn)的適配器稱為類適配器,因?yàn)?Adapter 類既繼承了 Adaptee (被適配類),也實(shí)現(xiàn)了 Target 接口(因?yàn)?Java 不支持多繼承,所以這樣來(lái)實(shí)現(xiàn)),在 Client 類中我們可以根據(jù)需要選擇并創(chuàng)建任一種符合需求的子類,來(lái)實(shí)現(xiàn)具體功能。

3. 對(duì)象適配器

     另外一種適配器模式是對(duì)象適配器,它不是使用多繼承或繼承再實(shí)現(xiàn)的方式,而是使用直接關(guān)聯(lián),或者稱為委托的方式,類圖如下:

      代碼實(shí)現(xiàn)如下:

  1. // 適配器類,直接關(guān)聯(lián)被適配類,同時(shí)實(shí)現(xiàn)標(biāo)準(zhǔn)接口   
  2. class Adapter implements Target{  
  3.     // 直接關(guān)聯(lián)被適配類   
  4.     private Adaptee adaptee;  
  5.       
  6.     // 可以通過(guò)構(gòu)造函數(shù)傳入具體需要適配的被適配類對(duì)象   
  7.     public Adapter (Adaptee adaptee) {  
  8.         this.adaptee = adaptee;  
  9.     }  
  10.       
  11.     public void request() {  
  12.         // 這里是使用委托的方式完成特殊功能   
  13.         this.adaptee.specificRequest();  
  14.     }  
  15. }  
  16.   
  17.   
  18. // 測(cè)試類   
  19. public class Client {  
  20.     public static void main(String[] args) {  
  21.         // 使用普通功能類   
  22.         Target concreteTarget = new ConcreteTarget();  
  23.         concreteTarget.request();  
  24.           
  25.         // 使用特殊功能類,即適配類,   
  26.         // 需要先創(chuàng)建一個(gè)被適配類的對(duì)象作為參數(shù)   
  27.         Target adapter = new Adapter(new Adaptee());  
  28.         adapter.request();  
  29.     }  
  30. }  
       測(cè)試結(jié)果與上面的一致。從類圖中我們也知道需要修改的只不過(guò)就是 Adapter 類的內(nèi)部結(jié)構(gòu),即 Adapter 自身必須先擁有一個(gè)被適配類的對(duì)象,再把具體的特殊功能委托給這個(gè)對(duì)象來(lái)實(shí)現(xiàn)。使用對(duì)象適配器模式,可以使得 Adapter 類(適配類)根據(jù)傳入的 Adaptee 對(duì)象達(dá)到適配多個(gè)不同被適配類的功能,當(dāng)然,此時(shí)我們可以為多個(gè)被適配類提取出一個(gè)接口或抽象類。這樣看起來(lái)的話,似乎對(duì)象適配器模式更加靈活一點(diǎn)。

4. 小結(jié)

      1、適配器模式也是一種包裝模式,與之前的 Decorator 裝飾模式同樣具有包裝的功能;此外,對(duì)象適配器模式還具有顯式委托的意思在里面(其實(shí)類適配器也有這種意思,只不過(guò)比較隱含而已),那么我在認(rèn)為它與 Proxy 代理模式也有點(diǎn)類似;

      2、從上面一點(diǎn)對(duì)比來(lái)看, Decorator 、 Proxy、 Adapter 在實(shí)現(xiàn)了自身的最主要目的(這個(gè)得看各個(gè)模式的最初動(dòng)機(jī)、描述)之外,都可以在包裝的前后進(jìn)行額外的、特殊的功能上的增減,因?yàn)槲艺J(rèn)為它們都有委托的實(shí)現(xiàn)意思在里面;

      3、我所看的書(shū)中說(shuō)適配器模式不適合在詳細(xì)設(shè)計(jì)階段使用它,它是一種補(bǔ)償模式,專用來(lái)在系統(tǒng)后期擴(kuò)展、修改時(shí)所用。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产中文另类天堂二区| 国产午夜精品福利免费不| 欧美国产日产在线观看| 97人妻精品一区二区三区男同| 伊人久久五月天综合网| 九九热精彩视频在线免费| 欧美日韩精品久久亚洲区熟妇人| 国产精品一区二区成人在线| 欧美日韩亚洲综合国产人 | 日韩三级黄色大片免费观看| 日韩欧美综合中文字幕| 国产专区亚洲专区久久| 国产毛片对白精品看片| 精品日韩av一区二区三区| 日本黄色美女日本黄色| 色一欲一性一乱—区二区三区| 久久亚洲成熟女人毛片| 亚洲一区二区三区三区| 女厕偷窥一区二区三区在线| 亚洲一区二区精品免费视频| 成人精品日韩专区在线观看| 亚洲中文字幕在线观看黑人| 福利在线午夜绝顶三级| 欧美日韩三区在线观看| 男女一进一出午夜视频| 夫妻性生活黄色录像视频| 国产亚洲精品一二三区| 日本午夜乱色视频在线观看| 在线精品首页中文字幕亚洲| 99国产一区在线播放| 国产精品久久女同磨豆腐| 久久精品亚洲精品一区| 日韩精品综合福利在线观看| 亚洲中文字幕剧情在线播放| 亚洲一区二区精品久久av| 综合久综合久综合久久| 日本不卡一本二本三区| 91精品视频免费播放| 国产麻豆一线二线三线| 国产精品一区二区有码| 黄片在线免费看日韩欧美|