最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中設(shè)計(jì)模式之適配器模式

 更新時(shí)間:2017年09月22日 14:42:08   作者:愛寶貝丶  
這篇文章主要介紹了java中設(shè)計(jì)模式之適配器模式的相關(guān)資料,適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口。適配器讓原本不兼容的類可以合作得親密無(wú)間,需要的朋友可以參考下

java中設(shè)計(jì)模式之適配器模式

 前言:

    適配器模式可以將一個(gè)類或接口應(yīng)用于另一個(gè)不同但是卻有聯(lián)系的接口,主要的做法是通過(guò)聲明一個(gè)目標(biāo)接口的實(shí)現(xiàn)類,在該類中聲明一個(gè)將被適配類或接口(被適配者)作為參數(shù)的構(gòu)造器和被適配者的實(shí)例,這樣在實(shí)現(xiàn)目標(biāo)接口的時(shí)候就可以調(diào)用被適配者的實(shí)例,并且輔以一些額外的操作。適配器模式的主體有三個(gè)部分:適配者,適配者實(shí)現(xiàn)類和被適配者。具體類結(jié)構(gòu)如下圖:

      這里將被適配者的對(duì)象以組合的方式放到適配器類中,那么被適配者及其實(shí)現(xiàn)者都可以使用該適配器。適配器模式的優(yōu)點(diǎn)在于可以將不同類型但是工作目的相似的對(duì)象兼容起來(lái),而缺點(diǎn)在于,如果目標(biāo)接口較大,那么要進(jìn)行兼容工作就需要許多額外的代碼。

      這里以一個(gè)不太符合實(shí)際的例子來(lái)對(duì)適配器模式進(jìn)行說(shuō)明?;痣u和鴨子都是可以叫并且飛的,但是火雞和鴨子的叫聲不一樣,并且火雞也沒有鴨子飛得遠(yuǎn)。如果想把一只火雞假扮為一只鴨子,就需要將火雞對(duì)象進(jìn)行一些裝扮,這里我們就可以聲明一個(gè)裝扮類,該裝扮類也是鴨子類型的一種,當(dāng)火雞進(jìn)入該裝扮之后就變成了一只鴨子。具體的類實(shí)現(xiàn)如下:

目標(biāo)接口(鴨子接口):

public interface Duck {
  void quack();
  void fly();
}

目標(biāo)接口的正常實(shí)現(xiàn)(鴨子實(shí)現(xiàn)):

public class MallardDuck implements Duck {
  @Override
  public void quack() {
    System.out.println("Quack");
  }

  @Override
  public void fly() {
    System.out.println("I'm flying");
  }
}

被適配者接口(火雞接口):

public interface Turkey {
  void gobble();
  void fly();
}

被適配者一般實(shí)現(xiàn)(火雞類):

public class WildTurkey implements Turkey {
  @Override
  public void gobble() {
    System.out.println("Gobble gobble");
  }

  @Override
  public void fly() {
    System.out.println("I'm flying a short distance");
  }
}

適配器:

public class TurkeyAdapter implements Duck {
  private Turkey turkey;

  public TurkeyAdapter(Turkey turkey) {
    this.turkey = turkey;
  }

  @Override
  public void quack() {
    turkey.gobble();
  }

  @Override
  public void fly() {
    for (int i = 0; i < 5; i++) {
      turkey.fly();
    }
  }
}

      通過(guò)火雞適配器,我們將火雞適配成了一只鴨子。這里需要說(shuō)明的是,適配器模式與裝飾者模式都是對(duì)源對(duì)象進(jìn)行裝飾,而達(dá)到一定的效果的,但是適配器模式和裝飾者模式的區(qū)別在于,適配器模式是適配源對(duì)象,使其能夠符合特定的接口,而裝飾者模式是對(duì)源對(duì)象的功能的一個(gè)擴(kuò)充,使其能做更多的工作。

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java如何實(shí)現(xiàn)多個(gè)線程之間共享數(shù)據(jù)

    Java如何實(shí)現(xiàn)多個(gè)線程之間共享數(shù)據(jù)

    這篇文章主要介紹了Java如何實(shí)現(xiàn)多個(gè)線程之間共享數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Java中clone的寫法

    詳解Java中clone的寫法

    這篇文章主要介紹了Java中clone的寫法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • QQ好友列表樹形列表java代碼實(shí)現(xiàn)代碼

    QQ好友列表樹形列表java代碼實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了QQ好友列表樹形列表簡(jiǎn)單實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • RabbitMQ中的Channel和Exchange詳解

    RabbitMQ中的Channel和Exchange詳解

    這篇文章主要介紹了RabbitMQ中的Channel和Exchange詳解,創(chuàng)建和銷毀TCP連接很耗時(shí),打開太多TCP連接,耗操作系統(tǒng)資源,并發(fā)量大到一定程度,系統(tǒng)的吞吐量會(huì)降低,使用一個(gè)connection多channel的方式,可以提升連接的利用率,需要的朋友可以參考下
    2023-08-08
  • 學(xué)習(xí)Java HashMap,看這篇就夠了

    學(xué)習(xí)Java HashMap,看這篇就夠了

    這篇文章主要介紹了Java HashMap的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • springMVC引入Validation的具體步驟詳解

    springMVC引入Validation的具體步驟詳解

    本文簡(jiǎn)單介紹如何引入validation的步驟,如何通過(guò)自定義validation減少代碼量,提高生產(chǎn)力,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-05-05
  • java 將字符串追加到文件已有內(nèi)容后面的操作

    java 將字符串追加到文件已有內(nèi)容后面的操作

    這篇文章主要介紹了java 將字符串追加到文件已有內(nèi)容后面的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Struts中使用validate()輸入校驗(yàn)方法詳解

    Struts中使用validate()輸入校驗(yàn)方法詳解

    這篇文章主要介紹了Struts中使用validate()輸入校驗(yàn)方法,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-09-09
  • Java的布隆過(guò)濾器你了解嗎

    Java的布隆過(guò)濾器你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Java的布隆過(guò)濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)示例代碼

    基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)示例代碼

    這篇文章主要給大家介紹了關(guān)于基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-10-10

最新評(píng)論

丹凤县| 虎林市| 阳泉市| 广汉市| 盐津县| 永川市| 南岸区| 遂溪县| 玛沁县| 彝良县| 察哈| 祁阳县| 修武县| 元氏县| 富民县| 团风县| 嘉义县| 宜宾县| 当雄县| 陈巴尔虎旗| 三原县| 孟连| 南乐县| 合川市| 崇州市| 平乡县| 探索| 诏安县| 威信县| 新津县| 浠水县| 沂水县| 曲阜市| 安平县| 大石桥市| 乌鲁木齐县| 浦江县| 修水县| 安泽县| 民勤县| 清原|