Java設(shè)計(jì)模式之適配器模式的實(shí)現(xiàn)
前言
適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能。
這種模式涉及到一個(gè)單一的類(lèi),該類(lèi)負(fù)責(zé)加入獨(dú)立的或不兼容的接口功能。
適配器的實(shí)現(xiàn)方式
適配器可以繼承或依賴(lài)已有的對(duì)象,然后實(shí)現(xiàn)想要的目標(biāo)接口。
示例
生活中有一個(gè)實(shí)例就是,筆記本上想要插內(nèi)存卡就必須借助讀卡器,讀卡器就是筆記本usb接口和內(nèi)部卡接口之間的適配器。
將內(nèi)存卡插入讀卡器,再將讀卡器插入筆記本,就能實(shí)現(xiàn)用筆記本讀取內(nèi)存卡了。
繼承實(shí)現(xiàn)
usb接口
public interface UsbInterface { public void read(); }
內(nèi)存卡類(lèi)
public class MemoryCard { public void readCard(){ System.out.println("讀取內(nèi)存卡"); } }
電腦類(lèi)
public class Computer { public void readCard(UsbInterface usb){ usb.read(); } }
電腦依賴(lài)使用Usb接口,想要使用內(nèi)存卡,就必須要有一個(gè)適配器讀卡器
讀卡器適配器類(lèi)
public class CardReaderAdapter extends MemoryCard implements UsbInterface{ @Override public void read() { readCard(); } }
這里使用的是繼承方式,繼承了內(nèi)存卡類(lèi)
客戶(hù)端類(lèi)
public class Client { public static void main(String[] args) { Computer computer = new Computer(); computer.readCard(new CardReaderAdapter()); } }
使用繼承暴露了所有被適配類(lèi)的方法,增大了耦合性,建議使用有依賴(lài)聚合的方式
依賴(lài)實(shí)現(xiàn)
依賴(lài)實(shí)現(xiàn)的適配器
public class CardReaderAdapter implements UsbInterface { private MemoryCard card; CardReaderAdapter(MemoryCard card){ this.card = card; } @Override public void read() { card.readCard(); } }
在Spring源碼中的使用
在Spring源碼中的轉(zhuǎn)化服務(wù)GenericConversionService就使用到了適配器模式
addConverter(GenericConverter converter)方法需要依賴(lài)使用GenericConverter類(lèi),但是只有Converter對(duì)象,這時(shí)就需要一個(gè)適配器進(jìn)行適配。
可以看到ConverterAdapter適配器實(shí)現(xiàn)了GenericConverter接口,并且聚合了Converter對(duì)象。這里就使用到了適配器模式。
到此這篇關(guān)于Java設(shè)計(jì)模式之適配器模式的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java適配器模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何讓W(xué)in10實(shí)現(xiàn)Java文件的開(kāi)機(jī)自啟動(dòng)
這篇文章主要介紹了如何讓W(xué)in10實(shí)現(xiàn)Java文件的開(kāi)機(jī)自啟動(dòng),對(duì)于一些想要一直運(yùn)行的Java文件,就會(huì)造成每次系統(tǒng)更新之后的重啟導(dǎo)致Java文件無(wú)法繼續(xù)運(yùn)行。,需要的朋友可以參考下2019-06-06SpringBoot使用AOP實(shí)現(xiàn)統(tǒng)計(jì)全局接口訪(fǎng)問(wèn)次數(shù)詳解
這篇文章主要介紹了SpringBoot通過(guò)AOP實(shí)現(xiàn)對(duì)全局接口訪(fǎng)問(wèn)次數(shù)的統(tǒng)計(jì),文章從相關(guān)問(wèn)題展開(kāi)全文內(nèi)容詳情,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06Spring 中使用Quartz實(shí)現(xiàn)任務(wù)調(diào)度
這篇文章主要介紹了Spring 中使用Quartz實(shí)現(xiàn)任務(wù)調(diào)度,Spring中使用Quartz 有兩種方式,感興趣的小伙伴們可以參考一下。2017-02-02springboot自定義日志注解的實(shí)現(xiàn)
本文主要介紹了springboot自定義日志注解的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03MybatisPlus使用代碼生成器遇到的小問(wèn)題(推薦)
這篇文章主要介紹了MybatisPlus使用代碼生成器遇到的小問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08關(guān)于maven本地倉(cāng)庫(kù)的配置方式
這篇文章主要介紹了關(guān)于maven本地倉(cāng)庫(kù)的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06java利用easyexcel實(shí)現(xiàn)導(dǎo)入與導(dǎo)出功能
這篇文章主要介紹了java利用easyexcel實(shí)現(xiàn)導(dǎo)入與導(dǎo)出功能,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-09-09java中阻塞隊(duì)列和非阻塞隊(duì)列的實(shí)現(xiàn)
在Java并發(fā)編程中,阻塞隊(duì)列和非阻塞隊(duì)列是兩種主要的隊(duì)列類(lèi)型,分別適用于不同的場(chǎng)景,了解這兩種隊(duì)列的特點(diǎn)和工作機(jī)制,可以幫助開(kāi)發(fā)者更好地選擇合適的數(shù)據(jù)結(jié)構(gòu)解決并發(fā)問(wèn)題2024-10-10java模擬實(shí)現(xiàn)斗地主發(fā)牌小程序
這篇文章主要為大家詳細(xì)介紹了java模擬實(shí)現(xiàn)斗地主發(fā)牌小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04基于Rest的API解決方案(jersey與swagger集成)
下面小編就為大家?guī)?lái)一篇基于Rest的API解決方案(jersey與swagger集成)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08