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

Java適配器模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年07月24日 11:07:09   作者:zy  
這篇文章主要介紹了Java適配器模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一.概念

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

二.UML

 

三.更加生動(dòng)的例子

四.實(shí)例分析

去年買了一個(gè)本本,另外給本本配了羅技G1光電套??拥氖牵怆娞椎氖髽?biāo)是USB接口,鍵盤是PS2接口,可我的本本卻沒有PS2接口啊。于是跑到市場(chǎng),淘了一個(gè)轉(zhuǎn)接器。

于是乎,我抽象了這么幾個(gè)類。

1.PS2Port(PS2接口)。

2.USBPort(USB接口)。

3.PS2ToUSB(對(duì)象適配器),將PS2接口裝換成USB接口。

4.TestAdapter(測(cè)試類),客戶端。

PS2Port  

package com.bjpowernode.adapter; 
 
/** 
 * PS2接口,圓口 
 * @author eason 
 * 
 */ 
public interface PS2Port { 
  public void workWithPS2(); 
} 

 USBPort

package com.bjpowernode.adapter; 
 
/** 
 * USB接口,U口 
 * @author eason 
 * 
 */ 
public interface USBPort { 
  public void workWithUSB(); 
} 
 

PS2ToUSB

package com.bjpowernode.adapter; 
 
/** 
 * 對(duì)象適配器 
 * 將PS2接口裝換成USB接口 
 * 所以此類類型是USB接口(implements USBPort) + 成員變量ps2Port 
 * @author eason 
 * 
 */ 
public class PS2ToUSB implements USBPort{ 
 
  private PS2Port ps2Port; 
   
  public PS2ToUSB(PS2Port ps2Port) { 
    this.ps2Port = ps2Port; 
  } 
   
  @Override 
  public void workWithUSB() { 
    System.out.println("轉(zhuǎn)換的關(guān)鍵在這里,本來是"); 
    ps2Port.workWithPS2(); 
    System.out.println("經(jīng)過你的轉(zhuǎn)換,現(xiàn)在是USB工作中"); 
  } 
   
} 
 

TestAdapter

package com.bjpowernode.adapter; 
 
/** 
 * 測(cè)試類 
 * client 
 * @author eason 
 * 
 */ 
public class TestAdapter { 
 
  public static void main(String[] args) { 
    //我現(xiàn)在有一個(gè)PS2接口 
    PS2Port ps2Port = new PS2Port() { 
      @Override 
      public void workWithPS2() { 
        System.out.println("PS2工作中"); 
      } 
    }; 
     
    //但是我需要的是一個(gè)USB接口啊,對(duì)我(client)來說,我只認(rèn)識(shí)USB接口 
    //經(jīng)過PS2ToUSB的轉(zhuǎn)換,PS2接口變成了USB接口 
    USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port); 
     
    ps2ToUsbPort.workWithUSB(); 
     
  } 
 
} 

五.對(duì)象的適配器和類的適配器

上述的適配器就是對(duì)象適配器。再看看類適配器。

PS2ToUSB,只是簡單模擬一下。因?yàn)閖ava不允許多繼承,所以java中沒有類模式的代碼,只有思想。

package com.bjpowernode.adapter; 
 
/** 
 * 類適配器 
 * @author eason 
 * 
 */ 
public class PS2ToUSB implements USBPort, PS2Port{ 
 
  //重寫workWithUSB,把工作交給workWithPS2 
  @Override 
  public void workWithUSB() { 
    workWithPS2(); 
  } 
   
} 

差別就是:對(duì)象適配器實(shí)現(xiàn)了客戶端想要的接口(USB),在內(nèi)部有一個(gè)被適配對(duì)象(PS2)的引用,通過組合實(shí)現(xiàn)適配功能。類適配器實(shí)現(xiàn)了客戶端想要的接口(USB)和被適配對(duì)象接口(PS2),通過繼承來實(shí)現(xiàn)適配功能。

六.使用場(chǎng)景及使用感受

1.希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致。

2.其實(shí)適配器模式有點(diǎn)無奈之舉,在前期設(shè)計(jì)的時(shí)候,我們就不應(yīng)該考慮適配器模式,而應(yīng)該考慮通過重構(gòu)統(tǒng)一接口。

七.適配器模式與裝飾者模式

它們都可以用來包裝對(duì)象,本質(zhì)區(qū)別在于

1.適配器模式:將一個(gè)接口轉(zhuǎn)換成另外一個(gè)接口。

2.裝飾者模式:不改變接口,只加入職責(zé)。

相關(guān)文章

  • SpringBoot中的文件上傳與下載詳解

    SpringBoot中的文件上傳與下載詳解

    這篇文章主要介紹了SpringBoot中的文件上傳與下載詳解,springboot是spring家族中的一個(gè)全新框架,用來簡化spring程序的創(chuàng)建和開發(fā)過程,本文我們就一起來看看上傳與下載的操作,需要的朋友可以參考下
    2023-08-08
  • SpringBoot定制JSON響應(yīng)數(shù)據(jù)返回的示例代碼

    SpringBoot定制JSON響應(yīng)數(shù)據(jù)返回的示例代碼

    @JsonView 是 Jackson 庫中的一個(gè)注解,它允許你定義哪些屬性應(yīng)該被序列化到 JSON 中,基于不同的“視圖”或“配置”,在本文中,通過了解@JsonView,你將能夠更好地掌握如何在Spring Boot應(yīng)用中定制JSON數(shù)據(jù)的輸出,需要的朋友可以參考下
    2024-05-05
  • 在idea中創(chuàng)建SpringBoot項(xiàng)目

    在idea中創(chuàng)建SpringBoot項(xiàng)目

    這篇文章主要介紹了在idea中創(chuàng)建SpringBoot項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java springboot壓縮文件上傳,解壓,刪除壓縮包方式

    Java springboot壓縮文件上傳,解壓,刪除壓縮包方式

    這篇文章主要介紹了Java springboot壓縮文件上傳,解壓,刪除壓縮包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Spring Boot如何使用httpcomponents實(shí)現(xiàn)http請(qǐng)求

    Spring Boot如何使用httpcomponents實(shí)現(xiàn)http請(qǐng)求

    這篇文章主要介紹了Spring Boot使用httpcomponents實(shí)現(xiàn)http請(qǐng)求的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 基于springboot?配置文件context-path的坑

    基于springboot?配置文件context-path的坑

    這篇文章主要介紹了基于springboot?配置文件context-path的坑,基于很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中StringBuffer和StringBuilder_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中StringBuffer和StringBuilder_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    StringBuffer、StringBuilder和String一樣,也用來代表字符串。String類是不可變類,StringBuffer則是可變類,任何對(duì)它所指代的字符串的改變都不會(huì)產(chǎn)生新的對(duì)象。本文重點(diǎn)給大家介紹String、StringBuffer、StringBuilder區(qū)別,感興趣的朋友一起看看吧
    2017-04-04
  • springmvc整合freemarker配置的詳細(xì)步驟

    springmvc整合freemarker配置的詳細(xì)步驟

    本篇文章主要介紹了springmvc整合freemarker的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • java理論基礎(chǔ)Stream API終端操作示例解析

    java理論基礎(chǔ)Stream API終端操作示例解析

    這篇文章主要為大家介紹了java理論基礎(chǔ)Stream API終端操作示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 微信APP支付(IOS手機(jī)端+java后臺(tái))版

    微信APP支付(IOS手機(jī)端+java后臺(tái))版

    這篇文章主要為大家詳細(xì)介紹了微信APP支付(IOS手機(jī)端+java后臺(tái))版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評(píng)論

莱芜市| 诏安县| 交口县| 泽库县| 墨玉县| 崇礼县| 邵武市| 图木舒克市| 六安市| 遂昌县| 商丘市| 剑川县| 冷水江市| 尼玛县| 崇阳县| 通许县| 恩平市| 铜川市| 寻甸| 宜兴市| 乌拉特后旗| 乐清市| 武安市| 潞西市| 磴口县| 万山特区| 阿瓦提县| 仙桃市| 县级市| 长乐市| 合江县| 黔东| 宜兴市| 霞浦县| 桂林市| 武定县| 科技| 苏尼特左旗| 高邮市| 霸州市| 太湖县|