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

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

為周寧等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及周寧網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、周寧網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

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

理解適配器設(shè)計(jì)模式需要從生活中的場景進(jìn)行聯(lián)系,在生活當(dāng)中有那些東西能夠稱為適配器呢?從字面上理解,“適配”的意思就是讓一個(gè)東西和另一個(gè)東西配對,能夠讓他們一起工作,比如大家用的筆記本電腦就需要用到電源適配器,轉(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)類對象了。

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

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

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

很顯然這樣的代碼編譯是不會通過的,因?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)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站名稱:Java中適配器模式的示例分析
當(dāng)前網(wǎng)址:http://muchs.cn/article16/gdisgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、自適應(yīng)網(wǎng)站品牌網(wǎng)站制作、域名注冊、響應(yīng)式網(wǎng)站、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)