定義 適配器模式(Adapter):將一個類的介面轉換成客戶希望的另外一個介面 那通俗點來說,啥是適配器呢,大家都知道港版的iphone的充電器,是不能直接在內地使用的,需要一個轉換器才能使用,那麼這個 轉換器就是所謂的適配器 . 那麼適配器能夠給我們帶來什麼好處呢? 使用港版iPhone的同學都知
定義
適配器模式(Adapter):將一個類的介面轉換成客戶希望的另外一個介面
那通俗點來說,啥是適配器呢,大家都知道港版的iphone的充電器,是不能直接在內地使用的,需要一個轉換器才能使用,那麼這個轉換器就是所謂的適配器.
那麼適配器能夠給我們帶來什麼好處呢?
使用港版iPhone的同學都知道,充電要用轉換器,那麼你轉換器內部是怎麼轉換的嗎?你不知道,你也不需要知道,不關心內部具體實現,那麼不就達到了高人所說的解耦的目的了嗎,不就對具體實現不產生依賴了嗎,回頭你出國玩了,外國的插線板又不一樣了,那怎麼辦? 直接再整個能用的轉換器不就完了嗎?
這同樣不就符合了OO的開閉原則嗎?
下麵,我們就結合充電器這個例子,來寫一個適配器的demo,首先,我們抽象一個充電器的介面,這個介面有一個充電的方法,其他所有的充電器都是它的不同實現而已
public interface Charger {
void electricity();
}
內地的充電器:
public class inLandCharger implements Charger {
public void electricity() {
System.out.println("我正在使用內地的插座");
}
}
香港的充電器:
public class HKCharger {
public void diffElectricity() {
System.out.println("我在使用HK的插座");
}
}
大家看到香港的充電器和內地的充電器是不一樣的,那麼我們就需要一個適配器來幫忙轉換:
public class adapter implements Charger {
public void electricity() {
new HKCharger().diffElectricity();
}
}
好了現在我們模擬使用一下:
public static void main(String[] args) {
//使用國行的同學是這樣充電的
Charger charger = new inLandCharger();
charger.electricity();
//使用港版的同學是這樣充電的
charger = new adapter();
charger.electricity();
}
結果:
我正在使用內地的插座
我在使用HK的插座
到這裡,我們就寫好了一個適配器的demo,其實再牛逼的設計模式,也是一點點演進出來的,我們不要被一些專有名詞嚇到,用你自己的方式去理解就好!