將一個類的接口變換成客戶端所期待的另外一種接口,從而使本來因接口不匹配而沒法在一塊兒工做的兩個類可以在一塊兒工 做。this
適配器分爲兩種,類適配器與對象適配器。code
類適配器的UML圖:對象
對象適配器的UML圖:blog
Target: 須要適配爲的接口。 Adapter: 適配器類。 Adaptee: 被適配的類。繼承
類適配器代碼如:接口
public class Adapter extends Adaptee implements Target { public void request() { super.doSomething(); } }
繼承了Adaptee被適配類已獲取被適配類的全部屬性和行爲,並實現須要適配爲的接口,在接口實現方法中添加適配邏輯。資源
對象適配器代碼如:開發
public class Adapter implements Target { public Adaptee adaptee; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } public void request() { this.adaptee.doSomething(); } }
其實就是將適配器與被適配的類的關係由繼承變爲了注入,也就是泛化關係變爲了關聯關係。get
二者的區別是,對象適配器比類適配器更靈活,由於在JAVA中繼承只能繼承一個類,若是須要一個須要適配的接口的信息來源於多個類,那麼這多個類原有的屬性和行爲就不能用繼承的方式去獲取,只能經過聚合。實際開發中,用對象適配器也比用類適配器的狀況多。產品
在產品迭代過程當中,引入了新的資源,但又不匹配現有接口,能夠使用適配器模式。