設計模式之Adapter模式
阿新 • • 發佈:2018-12-23
Adapter模式又稱為介面卡模式,顧名思義,介面卡的作用就是作為“介面卡”,將源轉換成目標,生活中最常見的“適配”是充電的操作。介面卡主要分為兩種:類介面卡和物件介面卡。我們從這兩方面進行簡析:
類介面卡
類介面卡主要是運用繼承的思想,拿手機充電為例,我們手機的介面(interface)是3.7V左右,但我們國家的生活電源是220V,我們的目標是要達到3.7V,也就是手機的介面就是我們的目標,首先我們定義一個手機介面(interface)如下:
interface intePhone{
public abstract double in();
}
接下來,我們定義生活電源(類):
public class Lifevoltage{
public double out(){
return 220;
}
}
現在還差充電最關鍵的部分-------充電器頭(變壓器),也就是我們的介面卡。我們定義如下:
public class Ada extends Lifevoltage implements intePhone{
public double in() {
return ((out()/59.46));
}
}
客戶端:
public class client { public static void main(String[] args) { Ada ad=new Ada(); System.out.println(ad.in()); } }
執行結果:
3.699966363942146
我們可以發現, 在介面卡類中,我們不僅僅實現了介面還繼承呼叫了充電器頭中的方法,但是,在客戶端中,我們並不需要識別到介面卡,就跟我們生活中充電一樣,我們不關心介面卡,只關心介面是否可以充電。
物件介面卡
還是以手機充電為例,我們對其進行簡單的實現,首先我們定義一個抽象類(相當於interface)如下:
abstract class intePhone{
public abstract double in();
}
接下來,我們定義生活電源(類):
public class Lifevoltage{ public double out(){ return 220; } }
介面卡我們定義如下:
public class Ada extends intePhone {
Lifevoltage d=new Lifevoltage();
public double in() {
return ((d.out()/59.46));
}
客戶端:
public class client {
public static void main(String[] args) {
Ada ad=new Ada();
System.out.println(ad.in());
}
}
我們可以發現,我們僅僅將interface改成了抽象類並且繼承改為了抽象類,為什麼要這樣做呢?因為為了能夠例項化,才可以呼叫方法。