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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Adapter模式

發(fā)布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Adapter模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Adapter模式

引言

生活中有很多Adapter的例子。比方說,你買了一款舒適、手感極佳的鍵盤,它是P/S接口的,然而你的新式電腦已經(jīng)淘汰了P/S接口,只提供USB接口。此時,為了能夠使用這款鍵盤,就需要一個轉(zhuǎn)接頭,它的一頭是P/S接口的,用來連接鍵盤;另一頭是USB的,用來連接電腦。類似這樣的轉(zhuǎn)接頭就充當(dāng)一個Adapter的作用。類似的例子還有電源的三相/兩相 轉(zhuǎn)接頭等等。

?Adapter模式應(yīng)該是設(shè)計(jì)模式中一個輕量級的模式,實(shí)現(xiàn)起來也比較簡單,有時候不經(jīng)意中,你可能就已經(jīng)實(shí)現(xiàn)了一個Adapter模式,只是自己沒有發(fā)現(xiàn)而已。本文將通過一個范例介紹 Adapter模式。

Shape范例

很多編程的書籍中都喜歡使用一個Shape作為范例講述面向?qū)ο笾械睦^承,盡管這里我們講述的是Adapter模式,但是并不妨礙我們也使用這個Shape的例子。考慮下面一幅關(guān)系圖:

在這幅圖中,Shape抽象類定義了Draw()方法,用于在屏幕上繪制圖形,Square和Circle繼承了Shape類,并實(shí)現(xiàn)了Draw()方法。另一個與Shape相關(guān)聯(lián)的類Window,它的Initialize()方法接受一個Shape類型的參數(shù),并調(diào)用其Draw()方法(實(shí)際中還可能進(jìn)行其他操作,這里的關(guān)鍵是方法的簽名只接受一個Shape類型的參數(shù))。

public void Initialize(Shape s)

現(xiàn)在考慮這樣一種情況:假如我們從第三方獲得了另一個類XTriangle,而它并沒有Draw()方法,只有一個完成同樣功能的Display()方法。很顯然,這個類也不會繼承自Shape基類,我們也無法對其進(jìn)行修改。此時。如果我們想讓客戶程序Window類使用XTriangle類,就不得不再重載一個Initialize()方法,讓它接受一個XTriangle類型的參數(shù)。但這是治標(biāo)不治本的方法,因?yàn)榭赡苡泻芏囝愃芖indow的類,它們都只接受Shape類型,對每一處都進(jìn)行修改顯然是不切實(shí)際的。此時,通常的辦法是創(chuàng)建一個包裝(Wrapper)類,讓這個包裝類繼承自Shape,同時讓它含有一個對XTriangle的引用,并且將Draw()方法的實(shí)現(xiàn)委托給XTriangle.Display()去完成。我們將這個包裝類命名為Triangle,而這種模式或者解決類似問題的方法,就稱為Adapter模式。注意在很多情況下我們會將Triangle命名為TriangleAdapter,但這里命名為Triangle會更清晰一些,但它仍是一個Adapter。下面是類圖:

接下來我們看下來看一下Triangle的實(shí)現(xiàn):

public class Triangle : Shape {

??? private XTriangle triangle;

??? public Triangle(XTriangle triangle) {
??????? this.triangle = triangle;
??? }
??? public override void Draw() {
??????? triangle.Display();
??? }
}

OK,這樣就實(shí)現(xiàn)了Adapter模式,它的正式定義是:將一個類(XTriangle)的接口轉(zhuǎn)換為客戶端(Window)所期待的另一接口(Shape)。Adpater能夠讓各個類之間相互協(xié)作,而不受不兼容接口的影響。

總結(jié)

這篇文章通過一個簡短的范例演示了Adatper模式,通過創(chuàng)建一個包裝類,解決了在引入第三方類時接口不兼容的問題。感謝閱讀,希望這篇文章能給你帶來幫助。

總結(jié)

以上是生活随笔為你收集整理的Adapter模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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