版權(quán)聲明:本文為 冬夏 原創(chuàng)發(fā)表在公眾號(hào)「Android從入門(mén)到精通」滑进,可以隨意轉(zhuǎn)載经窖,但請(qǐng)注明出處。
適配器模式(Adapter)是我們?cè)陂_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)用到的一個(gè)設(shè)計(jì)模式彭沼。它的作用是將一個(gè)類(lèi)的接口缔逛,轉(zhuǎn)換另一個(gè)接口。
那么為什么要進(jìn)行轉(zhuǎn)換呢姓惑?想想生活的例子你就知道了褐奴。設(shè)想一下,你出國(guó)旅游于毙,發(fā)現(xiàn)你的手機(jī)的充電器不能插進(jìn)當(dāng)?shù)氐牟遄囟驗(yàn)闃?biāo)準(zhǔn)不同。這時(shí)候你會(huì)買(mǎi)一個(gè)轉(zhuǎn)接器唯沮,然后解決了這個(gè)問(wèn)題脖旱。這個(gè)轉(zhuǎn)接器就是適配器,適配器模式也就是為了解決這一類(lèi)問(wèn)題而存在的介蛉。
我們回想一下轉(zhuǎn)接器的工作原理:轉(zhuǎn)接器一般由兩面組成萌庆,一面是適配你的手機(jī)充電器插頭的插座,另一面是適配當(dāng)?shù)夭遄牟孱^币旧。你將你的手機(jī)充電器插進(jìn)轉(zhuǎn)接器践险,再將轉(zhuǎn)接器插進(jìn)當(dāng)?shù)氐牟遄屯瓿闪诉m配吹菱。
適配器模式UML圖如下:
由此我們可以總結(jié)一下適配器模式的要點(diǎn):
- 適配器將一個(gè)對(duì)象包裝起來(lái)以改變其接口以符合用戶(hù)要求巍虫。
那么我們?nèi)绾斡么a的形式實(shí)現(xiàn)適配器模式呢?假設(shè)我們現(xiàn)在有這么一個(gè)情景:現(xiàn)在手頭上有一個(gè)遙控鳍刷,上面有“上”和“下”兩個(gè)按鈕垫言,但是我們希望用它來(lái)控制一個(gè)風(fēng)扇的開(kāi)關(guān),這樣就有了一個(gè)從“上”和“下”到“開(kāi)”和“關(guān)”的轉(zhuǎn)換倾剿。這種情況下就可以用到適配器模式了筷频。
首先是風(fēng)扇類(lèi)蚌成,非常簡(jiǎn)單,有 on 和 off 兩個(gè)方法
public class Fan {
public void on(){
System.out.println("The fan is on");
}
public void off(){
System.out.println("The fan is off");
}
}
接著是遙控類(lèi)凛捏,也非常簡(jiǎn)單担忧,有 up 和 down 兩個(gè) 方法
public class Controler {
public void up(){
System.out.println("The up button is pressed");
}
public void down(){
System.out.println("The down button is pressed");
}
}
接著就是我們的適配器接口,上面和風(fēng)扇一樣有 on 和 off 兩個(gè)方法坯癣。
public interface Adapter {
void on();
void off();
}
接下來(lái)瓶盛,我們把遙控和適配器組合起來(lái),變成了風(fēng)扇遙控器示罗,按下 up 按鈕就是風(fēng)扇開(kāi)惩猫,按下 down 按鈕就是風(fēng)扇關(guān)。
public class FanControler extends Controler implements Adapter {
private Fan mFan;
public FanControler(Fan fan){
mFan = fan;
}
@Override
public void up() {
on();
}
@Override
public void down() {
off();
}
@Override
public void on() {
mFan.on();
}
@Override
public void off() {
mFan.off();
}
}
接下來(lái)我們就可以運(yùn)行起來(lái)了:
public class Main {
public static void main(String[] agrs){
Fan fan = new Fan();
Controler fanControler = new FanControler(fan);
fanControler.up();
fanControler.down();
}
}
運(yùn)行結(jié)果如下:
The fan is on
The fan is off
由此可見(jiàn)蚜点,我們成功地將只有上和下兩個(gè)按鈕的遙控轉(zhuǎn)換成了能夠控制風(fēng)扇開(kāi)關(guān)的遙控器轧房。
總結(jié)一下:
適配器模式能夠?qū)⒁粋€(gè)接口轉(zhuǎn)換成另一個(gè)接口。具體是通過(guò)實(shí)現(xiàn)待轉(zhuǎn)換的接口绍绘,同時(shí)持有目標(biāo)接口奶镶,在內(nèi)部進(jìn)行接口轉(zhuǎn)換實(shí)現(xiàn)的。
歡迎關(guān)注我的個(gè)人公眾號(hào)陪拘,一起學(xué)習(xí)Android厂镇、Java、設(shè)計(jì)模式等技術(shù)!