溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中適配器模式的示例分析

發(fā)布時(shí)間:2021-10-18 10:39:43 來源:億速云 閱讀:89 作者:小新 欄目:編程語言

小編給大家分享一下Java中適配器模式的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Java程序設(shè)計(jì)模式系列之適配器模式

理解適配器設(shè)計(jì)模式需要從生活中的場景進(jìn)行聯(lián)系,在生活當(dāng)中有那些東西能夠稱為適配器呢?從字面上理解,“適配”的意思就是讓一個(gè)東西和另一個(gè)東西配對(duì),能夠讓他們一起工作,比如大家用的筆記本電腦就需要用到電源適配器,轉(zhuǎn)換插口和電流到筆記本上給筆記本電腦進(jìn)行供電。再比如在國內(nèi)所有的電器插座都是兩口或三口的國內(nèi)標(biāo)準(zhǔn)插座,但如果到中國大陸以外的地區(qū)旅行,想要使用電源給電子產(chǎn)品供電,就需要轉(zhuǎn)換插口了。比如王老師到了香港,看到的電源插座是這樣的:

Java中適配器模式的示例分析

很明顯,從國內(nèi)帶去的手機(jī)就無法充電了。

那么這個(gè)問題怎么解決呢?

Java中適配器模式的示例分析 

經(jīng)過查找資料,王老師找到了一種產(chǎn)品,它就是長成這個(gè)樣子的東東,叫“電源適器”。

用法相信大家一看就清楚了。

有個(gè)它,媽媽再也不用擔(dān)心我擔(dān)心我沒有電了。

“哦!我知道了,這不是個(gè)轉(zhuǎn)換口嗎?”是的,其實(shí)跟讀卡器的概念是一樣的,就是將原本不能用的接口經(jīng)過適配器轉(zhuǎn)換成能用的接口。

概念:

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

“還是沒讀懂!”不要緊,下面簡單易懂的案例+代碼,讓你明白什么是適配器模式。

Java中適配器模式的示例分析 

接下來我們就以電源這個(gè)案例來介紹適配器模式:

這里有兩個(gè)不兼容的接口,電源A接口和電源B接口,并且有各自相應(yīng)的實(shí)現(xiàn)方法。代碼如下:

Java中適配器模式的示例分析 

Java中適配器模式的示例分析 

那么兩個(gè)接口應(yīng)該有各自的實(shí)現(xiàn)類,代碼如下:

Java中適配器模式的示例分析Java中適配器模式的示例分析 

接下來就應(yīng)該是客戶端來調(diào)用了,先定義電源A開始工作方法:

Java中適配器模式的示例分析 

那么想要調(diào)用start方法就需要傳入PowerA的實(shí)現(xiàn)類對(duì)象了。

所以這里我們創(chuàng)建一個(gè)PowerAImpl對(duì)象,并且調(diào)用start方法。

Java中適配器模式的示例分析 

編譯后運(yùn)行的結(jié)果是這樣滴:

Java中適配器模式的示例分析 

我們這里已經(jīng)寫好了,如果這時(shí)我們想傳PowerB接口到start方法可以嗎?怎么辦呢?

那么此時(shí)我們有兩種辦法來實(shí)現(xiàn),第一種:

Java中適配器模式的示例分析 

再添加一個(gè)startB方法,但這不是一個(gè)好的解決方案,因?yàn)樵趕tartA中調(diào)用insert方法的前后我們可能存在一些邏輯以及業(yè)務(wù),同樣的在startB中調(diào)用connect方法的前后可能存在這些相同的邏輯及業(yè)務(wù),就只有connect方法調(diào)用這一句不同,那么重寫一份就是多余的了,代碼重復(fù)了。不太符合我們面向?qū)ο蟮木幊趟枷?,怎么辦呢?往下看。

Java中適配器模式的示例分析 

接下來看第二種解決方案:我們還是想用一個(gè)start方法解決這個(gè)問題,到這里會(huì)有人想到直接把start方法改成適應(yīng)兩個(gè)接口的,王老師在此處需要先給大家說明一個(gè)問題了,面向?qū)ο蟮木幊淘瓌t中有一點(diǎn)非常重要的是“對(duì)修改關(guān)閉,對(duì)擴(kuò)展開放”,如果我們的程序已經(jīng)上線運(yùn)行,當(dāng)時(shí)并沒有考慮要傳PowerB接口進(jìn)來,只傳PowerA接口就好了,但現(xiàn)在業(yè)務(wù)修改要求也可以傳PowerB接口,那么修改方法將對(duì)其他已寫好的程序造成怎樣的影響也是未知的,可能其他小伙伴調(diào)用了你的start方法就會(huì)出問題了,也就是說調(diào)用了你的start方法的代碼都會(huì)有連鎖反應(yīng)了。OK!看下面!

我們需要實(shí)現(xiàn)這樣的東東

Java中適配器模式的示例分析 

很顯然這樣的代碼編譯是不會(huì)通過的,因?yàn)槟壳癙owerA和PowerB本來就是兩個(gè)不同的接口,相當(dāng)于一個(gè)三口的插座和一個(gè)兩口的根本插不進(jìn)入是一樣的。

要想實(shí)現(xiàn)轉(zhuǎn)換,現(xiàn)在需要適配器啦!我們需要把PowerB轉(zhuǎn)換成PowerA傳進(jìn)來,那么我們就給PowerA做一個(gè)適配器。Java中適配器模式的示例分析

1、首先要適配的是PowerA,所以實(shí)現(xiàn)PowerA接口,那么PowerAAdapter就可以作為PowerA的實(shí)現(xiàn)類傳進(jìn)start方法了。

2、我們是要用這個(gè)適配器將PowerB轉(zhuǎn)成PowerA,那么就需要和PowerB取得聯(lián)系,所以定義一個(gè)PowerB作為屬性,并通過構(gòu)造方法進(jìn)行初始化操作。

3、實(shí)現(xiàn)了PowerA接口需要重寫其方法,那么在重寫的insert方法中調(diào)用PowerB的connect方法,適配器就寫好了。

現(xiàn)在來測試一下:

Java中適配器模式的示例分析 

編譯之后運(yùn)行結(jié)果是這樣滴:

Java中適配器模式的示例分析 

結(jié)果說明PowerB接口的實(shí)現(xiàn)類開始工作了,但傳參數(shù)的時(shí)候是通過PowerA接口的形式傳進(jìn)來進(jìn)行工作的。這就是神奇的適配器模式啦!

按照步驟敲一敲代碼!更有助于理解!

以上是“Java中適配器模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI