日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java适配器模式_适配器模式的设计,你get到了吗?

發(fā)布時(shí)間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java适配器模式_适配器模式的设计,你get到了吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:rabbitwfly


假如我們又這樣軟件系統(tǒng),我們希望它能夠和一個新的庫搭配使用,但是這個庫所提供的接口與我們的軟件系統(tǒng)不兼容,我們不想改變現(xiàn)有代碼就能解決這個問題,怎么辦?這個時(shí)候我們就需要將這個新的庫接口轉(zhuǎn)換成我們所需要的接口,這就是適配器模式設(shè)計(jì)動機(jī)。

一、模式定義

何謂適配器模式?適配器模式就是將一個類的接口,轉(zhuǎn)換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。

在適配器模式中,我們可以定義一個包裝類,包裝不兼容接口的對象,這個包裝類就是適配器,它所包裝的對象就是適配者。

適配器提供給客戶需要的接口,適配器的實(shí)現(xiàn)就是將客戶的請求轉(zhuǎn)換成對適配者的相應(yīng)的接口的引用。也就是說,當(dāng)客戶調(diào)用適配器的方法時(shí),適配器方法內(nèi)部將調(diào)用適配者的方法,客戶并不是直接訪問適配者的,而是通過調(diào)用適配器方法訪問適配者。因?yàn)檫m配器可以使互不兼容的類能夠“合作愉快”。

二、模式結(jié)構(gòu)

這個適配器模式充滿著良好的OO設(shè)計(jì)原則:使用對象組合,以修改的接口包裝別適配者。而且這樣做還有一個優(yōu)點(diǎn),被適配者的任何子類,都可以搭配適配器使用。

適配器模式有如下四個角色:

Target:目標(biāo)抽象類

Adapter:適配器類

Adaptee:適配者類

Client:客戶類

三、模式實(shí)現(xiàn)

在這里我們模擬一個機(jī)器人。首先我們擁有一個機(jī)器人,它可以叫(cry),跑(run)。現(xiàn)在我們希望它能夠像小狗一樣叫,像小狗一樣跑。

首先我們需要一個機(jī)器人接口:Robot.java。提供cry()和run()方法。

輪到重點(diǎn)啦:適配器,這個適配器能夠使仿生機(jī)器人像狗一樣叫,一樣跑。

運(yùn)行結(jié)果。

如果我們希望這個仿生機(jī)器人能夠像鳥一樣唧唧的叫和飛呢?只需要添加一個能夠叫和飛的鳥類以及一個鳥的適配器即可。如下:

客戶端:Client.java

運(yùn)行結(jié)果。

如果我們希望這個仿生機(jī)器人能夠像鳥一樣唧唧的叫和飛呢?只需要添加一個能夠叫和飛的鳥類以及一個鳥的適配器即可。如下:

四、模式優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 將目標(biāo)類和適配者類解耦,通過使用適配器讓不兼容的接口變成了兼容,讓客戶從實(shí)現(xiàn)的接口解耦。
  • 增加了類的透明性和復(fù)用性,將具體的實(shí)現(xiàn)封裝在適配者類中,對于客戶端類來說是透明的,而且提高了適配者的復(fù)用性。
  • 靈活性和擴(kuò)展性都非常好在不修改原有代碼的基礎(chǔ)上增加新的適配器類,符合“開閉原則”。
  • 五、使用場景

  • 系統(tǒng)需要使用現(xiàn)有的類,而這些類的接口不符合系統(tǒng)的需要。
  • 2.想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類

    六、模式擴(kuò)充

    適配器模式分為對象適配器和類適配器。前面所概述的是對象適配器。為什么沒有將類適配器呢?因?yàn)轭愡m配器需要使用多重繼承,這個在java中沒有辦法實(shí)現(xiàn)的。但是當(dāng)我們遇到可以使用多重繼承語言的時(shí)候,還是可能會遇到這種需求。

    類適配器模式UML圖。

    在類適配器中,由于適配器是適配者的子類,所以可以在適配器類中置換一些適配者的方法,使得適配器的靈活性更強(qiáng)。但是對于一些不支持多重繼承的編程語言來說(Java ,C#),其使用就會存在一定的局限性:不能將一個適配者類和它的子類都適配到目標(biāo)接口。

    對于對象適配器而言,一個對象適配器可以把多個不同的適配者適配到同一個目標(biāo),也就是說,同一個適配器可以把適配者類和它的子類都適配到目標(biāo)接口。但是如果我們需要置換掉適配者的某些方法時(shí),這個實(shí)現(xiàn)就會比較難,我們首先要先做一個適配者的子類,將適配者類的方法置換掉,然后再把適配者類的子類當(dāng)做真正的適配者進(jìn)行適配,實(shí)現(xiàn)過程較為復(fù)雜。

    七、總結(jié)

    1、當(dāng)我們需要使用的一個現(xiàn)有的類,但是他的接口并不符合我們的需求時(shí),我們可以使用適配器模式。

    2、適配器模式分為類適配器和對象適配器,其中類適配器需要用到多重繼承。

    總結(jié)

    以上是生活随笔為你收集整理的java适配器模式_适配器模式的设计,你get到了吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。