1、何謂擴充卡模式?
将一個類的接口轉換成客戶希望的另外一個接口。Adapter模式是的原本由于接口不能相容而不能一起工作的那些類可以在一起工作。
2、主要解決的問題?
簡單的說,你需要的東西就在你面前,但是你卻不能使用,而短時間又無法改造它,于是我們就想辦法适配它。
3、有東西不能用,又不能改造,想辦法适配它?
意思就是使得一個東西适合另外一個東西。
舉個例子:
假設現在你是一個老闆,你要到美國談生意,這份合同非常重要,但是你不會英語,但是對方也不會中文,這個時候,要你短時間之内學會英文是不可能的事,叫美國那邊的老闆學會中文也是不符合實際的,此時,最好的解決辦法是什麼,那就是找一個翻譯,此時這個翻譯你就可以了解為擴充卡。
在軟體開發中也就是系統的資料和行為都正确,但接口不符合時,我們該考慮用擴充卡,目的是使控制範圍之外的一個原有對象與某個接口比對。
擴充卡模式主要應用于希望複用一些現存的類,但是接口又與複用環境要求不一緻的情況。
下面用個簡單的案例來說明
先貼出uml
老闆,上代碼:
/**
*
* 被适配的類
* */
public class Adaptee {
public void request(){
System.out.println("可以完成客戶的需求!");
}
}
/**
* 擴充卡類
* 通過擴充卡,我們可以讓兩個并不相關的類連接配接起來。
* 這是第一種适配的方式
* */
public class Adapter extends Adaptee implements Target{
public void execute() {
//将請求給目标接口的實作
super.request();
}
}
/**
*
* 目标接口
* */
public interface Target {
void execute();
}
public class Client {
public static void main(String[] args) {
Target t = new Adapter();
t.execute();
}
}
這是第一種适配的方式,通過繼承加實作。
下面給出另外一種适配的方式:
public class Adapter2 implements Target{
private Adaptee a;
//把需要被适配的類注入進來
public Adapter2(Adaptee a) {
this.a = a;
}
public void execute() {
//調用方法
a.request();
}
}
測試一下:
public class Client {
public static void main(String[] args) {
Target t = new Adapter2(new Adaptee());
t.execute();
}
}
何時使用設計模式?
在想使用一個已經存在的類,但如果他的接口,也就是他的方法和你的要求不相同時,就應該考慮用擴充卡模式?
對的,兩個類所做的事情相同或相似,但是具有不同的接口時要使用它。而且由于類都共享同一個接口,是的客戶代碼如何?
客戶代碼可以統一調用同一接口就行了,這樣應該可以更簡單,更能直接,更緊湊。
其實設計模式也是無奈之舉,有點亡羊補牢的感覺,沒辦法呀,軟體就有維護的額那一天,維護就可能因為不同的開發人員,不同的産品,不同廠家而造成功能類似而接口不同的情況,此時擴充卡模式就橫空出世了。