適配器模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口暮胧。適配器模式讓那些接口不兼容的類可以一起工作缭黔。讓一個(gè)類的接口和另一個(gè)類的接口匹配起來(lái)攒射,而無(wú)須修改原來(lái)的適配者接口和抽象目標(biāo)類接口猜惋。
適配器模式的別名為包裝器模式侧漓,它既可以作為類結(jié)構(gòu)型模式,也可以作為對(duì)象結(jié)構(gòu)型模式蛀醉。在適配器模式的定義中所提及的接口是指廣義的接口悬襟,它可以表示一個(gè)方法或者方法的集合。
適配器模式的結(jié)構(gòu)和實(shí)現(xiàn):
1.Target(目標(biāo)抽象類):目標(biāo)抽象類定義客戶所需的接口拯刁,可以是一個(gè)抽象類或接口古胆,也可以是具體類。 在類適配器中,由于java語(yǔ)言不支持多重繼承逸绎,它只能是接口惹恃。
2.Adapter(適配器類):它可以調(diào)用另一個(gè)接口,作為一個(gè)轉(zhuǎn)換器棺牧,對(duì)適配者和目標(biāo)抽象類進(jìn)行適配巫糙。適配器Adapter是適配器模式的核心,在類適配器中颊乘,它可以通過(guò)實(shí)現(xiàn)Target接口并繼承Adaptee類來(lái)使二 者產(chǎn)生聯(lián)系参淹;在對(duì)象適配其中,它通過(guò)繼承Target并關(guān)聯(lián)一個(gè)Adaptee對(duì)象使二者聯(lián)系乏悄。
3.Adaptee(適配者類):即被適配的角色浙值,它定義了一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配檩小,適配者類一般是一個(gè)具體類开呐,包含了客戶希望使用的業(yè)務(wù)方法,在某 些情況下甚至沒(méi)有適配者類的源碼规求。
適配器模式包括類適配器和對(duì)象適配器筐付。在對(duì)象適配器模式中,適配器與適配者之間是關(guān)聯(lián)關(guān)系阻肿;在類適配器模式中瓦戚,適配器與適配者之間是繼承(或?qū)崿F(xiàn))關(guān)系。
1.類適配器:
目標(biāo)抽象類:
public interface Target {
public void request();
}
適配器類:
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.specifiRequest();
}
}
適配者類:
public class Adaptee {
public void specifiRequest() {
System.out.println("類適配器適配成功丛塌!");
}
}
Test:
public class Test {
public static void main(String[] args) {
//類適配器
Adapter adapter=new Adapter();
adapter.request();
}
}
2.對(duì)象適配器:
目標(biāo)抽象類:
public abstract class Target {
public abstract void request();
}
適配器類:
public class Adapter extends Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee=adaptee;
}
@Override
public void request() {
adaptee.specifiRequest();
}
}
適配者類:
public class Adaptee {
public void specifiRequest() {
System.out.println("對(duì)象適配器適配成功较解!");
}
}
Test:
public class Test {
public static void main(String[] args) {
//對(duì)象適配器
Adapter adapter=new Adapter(new Adaptee());
adapter.request();
}
}