介面卡模式把適配的api轉換成為目標類的api。
介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。
在上圖中,目標(target)角色:這就是所期待得到的介面。源(adapee)角色:現在需要適配的介面。介面卡(adaper)角色:介面卡類是本模式的核心。介面卡把源介面轉換成目標介面。顯然,這一角色不可以是介面,而必須是具體類。
用**寫就是這樣:
inte***ce adaptee
abstract class adapter implements adaptee
void sampleoperation2() ;
}class target extends adapter
@override
void sampleoperation2()
}
可以想象成這樣,某天你去國外旅遊,遇到乙個110v的介面,這個110v的介面就是adaptee,然後你用乙個110v-220v的轉接器插上去,這個110v-220v的轉接器就是adapter,之後這個110v-220v的轉接器提供的介面就是target。也就是你需要的東西。把不適合你的介面換成適合你的介面。
同時,其實adapter「介面卡」,直接就是「改編者」的意思。
這下大概明白了吧,然而,介面卡如果這樣用,在程式設計裡面實在是太無厘頭了,為何要無故多定義乙個類呢?還不如直接改寫介面的方法,或者再弄乙個新的介面!
其主要還是將兩個不相關的介面、抽象類連線起來,將2個類裡面我們需要的東西,湊起來,再組成乙個我們所需要的新類。
下面再用乙個例子來說明。如下**,inte***ce1介面要求實現三個抽象方法,而class1裡面抽象則有乙個name是我們需要的。很明顯,我們需要class1的變數,inte***ce1裡面的方法,因此,我們定義乙個新的介面卡類helloadapter將class1與inte***ce1連線起來。在主函式中,helloadapter的例項想用哪個方法就用哪個方法。
而關鍵是,接下去,helloadapter的子類,還無須強制實現inte***ce1介面的3個方法,helloadapter的子類想要inte***ce1與class1的東西,都可以隨便拿。
inte***ce inte***ce1
abstract class class1
public string getname()
public void setname(string name)
}class helloadapter extends class1 implements inte***ce1
@override
public void chinese()
@override
public void english()
@override
public void japanese()
}public class adaptertest
}
執行結果如下所示:
這就是我個人理解的介面卡模式,在c#的asp.net的資料庫結果列印類、安卓中存在大量的介面卡,它就是將兩樣本來毫不相干的資料來源和ui元件,連線起來的橋梁。比如安卓中,baseadapter就是陣列與網格檢視gridview的連線的橋梁。
再理解不了,adapter翻譯為……與……的橋梁得了。
Java 介面卡模式
先上基本概念,再談談我的理解 介面卡模式有兩種,物件介面卡和類介面卡。介面卡模式將乙個類的介面轉換成客戶期望的另乙個介面,介面卡讓原本介面不相容的類可以合作無間。例子 交流電介面卡。看看類圖關係 這個為物件介面卡的類圖 解釋一下 比如client類有些方法a b adaptee也有一些特別的方法a1...
Java 介面卡模式
inte ce windows class mywindows implements windows public void max public void close public class adaptdemo 先看 介面windows,介面實現類mywindows,但是我現在想實現介面wind...
java介面卡模式
gnight的文章 定義 屬於結構型模式,其主要作用是將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。比如你手機只有2.5mm介面 貌似就nokia幹的出來 但你只能買到3.5mm的,這時就需要買個介面卡了 意圖宗旨 保留現有類所提供的...