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

java中設計模式之適配器模式

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

java中設計模式之適配器模式

 前言:

    適配器模式可以將一個類或接口應用于另一個不同但是卻有聯系的接口,主要的做法是通過聲明一個目標接口的實現類,在該類中聲明一個將被適配類或接口(被適配者)作為參數的構造器和被適配者的實例,這樣在實現目標接口的時候就可以調用被適配者的實例,并且輔以一些額外的操作。適配器模式的主體有三個部分:適配者,適配者實現類和被適配者。具體類結構如下圖:

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

      這里以一個不太符合實際的例子來對適配器模式進行說明?;痣u和鴨子都是可以叫并且飛的,但是火雞和鴨子的叫聲不一樣,并且火雞也沒有鴨子飛得遠。如果想把一只火雞假扮為一只鴨子,就需要將火雞對象進行一些裝扮,這里我們就可以聲明一個裝扮類,該裝扮類也是鴨子類型的一種,當火雞進入該裝扮之后就變成了一只鴨子。具體的類實現如下:

目標接口(鴨子接口):

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

目標接口的正常實現(鴨子實現):

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();
}

被適配者一般實現(火雞類):

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();
    }
  }
}

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

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

相關文章

  • Java如何實現多個線程之間共享數據

    Java如何實現多個線程之間共享數據

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

    詳解Java中clone的寫法

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

    QQ好友列表樹形列表java代碼實現代碼

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

    RabbitMQ中的Channel和Exchange詳解

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

    學習Java HashMap,看這篇就夠了

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

    springMVC引入Validation的具體步驟詳解

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

    java 將字符串追加到文件已有內容后面的操作

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

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

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

    Java的布隆過濾器你了解嗎

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

    基于Java反射的map自動裝配JavaBean工具類設計示例代碼

    這篇文章主要給大家介紹了關于基于Java反射的map自動裝配JavaBean工具類設計的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-10-10

最新評論

兴化市| 武定县| 龙口市| 六枝特区| 达拉特旗| 安泽县| 清苑县| 辽宁省| 财经| 称多县| 个旧市| 红原县| 平江县| 海门市| 和林格尔县| 吴江市| 嘉黎县| 常熟市| 措美县| 海安县| 岐山县| 哈尔滨市| 大名县| 微山县| 喀喇沁旗| 芒康县| 左权县| 鹤壁市| 略阳县| 彩票| 孟津县| 阳高县| 三亚市| 广德县| 准格尔旗| 长寿区| 贵南县| 吴江市| 公安县| 普兰县| 景泰县|