乙個target -->(target一般是介面,暴露給client使用的,或者乾脆叫作client inte***ce)
乙個adaptee --> 被適配者
乙個adaptor --> 介面卡
總結一下介面卡模式的玩法:
首先一點,因為只有target是對外暴露的,因此客戶只能使用target。
一般來說,target的具體實現是adaptee來完成的。但是很多情況下adaptee提供的服務不能滿足target的需求(這裡強調的是方法簽名不同,從而與**模式區分),這時就要借助於adaptor了。
adaptor會在adaptee所提供的服務的基礎上,進行一些調整或改進,最終滿足target的需要。
最後,表面上看起來,target的具體實現是由adaptor來完成,而不再是由adaptee來完成。
我發現學設計模式的時候類圖是個好東西,可以對乙個設計模式有個巨集觀的把握,花點時間學一下還是很有必要的。下面是兩種介面卡模式的類圖。
著名屠夫鎮關西,殺豬從來不用刀,一直用220v的電。見效快,不粘血,用過都說好。
我司擅長發電,打算跟鎮關西合作。不過我司放的電都是330v,用來殺豬的話豬的體驗可能不太好。怎麼辦呢?借助介面卡:
首先是target類,也就是client inte***ce:
/**
* 目標類(或者叫client inte***ce)
*/public
inte***ce
target
adaptee類:
public
class
adaptee
}
adaptor類:
/**
* 方式一:物件介面卡
*/public
class
adaptor
extends
adaptee
implements
target
}// 也可以這麼寫:
/** * 方式二:類介面卡
*/public
class
adaptor
implements
target
}
最後看下client如何使用:
public
class
client
}// 執行結果:
// adaptee輸出330v
// adaptor進行降壓,330v->220v
介面卡的思想。如何使本來不相容的兩個物件或者介面能夠相互合作。
介面卡的優點。將介面或者資料轉換的**從主要業務邏輯中分離。
兩種介面卡。adaptor類的例項**中,給出了兩種寫法:第一種使用了組合(或者叫構成)機制,將adaptee物件封裝在內部;第二種使用了繼承機制。分別被稱為物件介面卡和類介面卡。
適用場景。如果你希望使用某個類,但是這個類的介面和其它**不相容。實際工作和學習中,如果乙個新系統要用到很多遺留**,那麼就很可能有介面卡的用武之地。
介面卡模式本身對adaptee的擴充套件性是有一定要求的。
共同學習,歡迎交流!
這裡是原始碼
設計模式 結構型模式 介面卡模式
抽象成績操作類 目標介面 inte ce scoreoperation 快速排序類 適配者 class quicksort public void sort int array,int p,int r public intpartition int a,int p,int r swap a,j 1,...
設計模式 結構型模式 介面卡模式
已有介面a和b,在不修改a b的情況下,a要為b所用,這個時候需要乙個中間人來承擔將a的介面封裝成為b可以使用的介面,這裡的 中間人 就是介面卡 adapter 轉換介面 coyoteadapter將tomcat 的connector和container進行解耦,connector和containe...
設計模式 結構型模式 介面卡模式
將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。角色說明 首先來說下物件介面卡模式的實現方式,就以電壓轉換為例子。現在我們需要定義乙個220v轉換成5v的介面 inte ce adapter被適配角色,一般是已存在的類,需要適配新的介面。生...