欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

 前言:

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

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

      這里以一個不太符合實(shí)際的例子來對適配器模式進(jìn)行說明?;痣u和鴨子都是可以叫并且飛的,但是火雞和鴨子的叫聲不一樣,并且火雞也沒有鴨子飛得遠(yuǎn)。如果想把一只火雞假扮為一只鴨子,就需要將火雞對象進(jìn)行一些裝扮,這里我們就可以聲明一個裝扮類,該裝扮類也是鴨子類型的一種,當(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();
    }
  }
}

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

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

相關(guān)文章

  • java實(shí)現(xiàn)簡單猜數(shù)字

    java實(shí)現(xiàn)簡單猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單猜數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Automapper實(shí)現(xiàn)自動映射的實(shí)例代碼

    Automapper實(shí)現(xiàn)自動映射的實(shí)例代碼

    這篇文章主要介紹了Automapper實(shí)現(xiàn)自動映射的實(shí)例代碼,需要的朋友可以參考下
    2017-09-09
  • 史上最全Java8日期時間工具類(分享)

    史上最全Java8日期時間工具類(分享)

    這篇文章主要介紹了史上最全Java8日期時間工具類(分享),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    Java購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 利用注解配置Spring容器的方法

    利用注解配置Spring容器的方法

    本篇文章主要介紹了利用注解配置Spring容器的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • springboot?實(shí)戰(zhàn):異常與重定向問題

    springboot?實(shí)戰(zhàn):異常與重定向問題

    這篇文章主要介紹了springboot實(shí)戰(zhàn):異常與重定向問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring Boot整合Redis的完整步驟

    Spring Boot整合Redis的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot整合Redis的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Java容器HashMap與HashTable詳解

    Java容器HashMap與HashTable詳解

    本文主要介紹HashMap 和 Hashtable的工作原理和使用方法,有興趣的朋友可以參考
    2017-04-04
  • Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件

    Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件

    這篇文章主要介紹了Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件,JavaMail是專門用來處理郵件的Java API,需要的朋友可以參考下
    2015-11-11
  • Springboot整合ActiveMQ實(shí)現(xiàn)消息隊(duì)列的過程淺析

    Springboot整合ActiveMQ實(shí)現(xiàn)消息隊(duì)列的過程淺析

    昨天仔細(xì)研究了activeMQ消息隊(duì)列,也遇到了些坑,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合ActiveMQ的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評論