介面卡模式

2021-10-25 17:52:02 字數 2152 閱讀 7277

介面卡模式是將乙個類的介面轉換成客戶希望的另乙個介面,其目的在於使得原本由於介面不相容而不能一起工作的類可以一起工作。在現實生活中有很多第三方適配的案例,如:同歪果仁交流的時候會有乙個翻譯;將220v的電壓通過手機充電器轉換為手機的支援電壓。

介面卡模式中的角色劃分:

2、使用場景

(1)優點:

(2)缺點:對於類介面卡來說,更換介面卡的實現過程比較複雜。

類介面卡模式是通過繼承來實現的。以電壓轉換為例,假設現在要給手機充電需要5v的電壓,那麼就需要通過充電器將220v電壓轉換為手機支援的電壓。具體實現如下:

源角色**如下:

/**

* 源角色,220v電壓

*/public class voltage220v

}

然後再通過介面定義乙個目標角色5v:

/**

* 目標角色:5v

*/public inte***ce voltage5v

介面卡角色,繼承源角色並且實現目標角色:

/**

* 介面卡

*/public class voltageadapter extends voltage220v implements voltage5v

}

接著,我們的需求來了,此時手機要充電:

public class phone else if(voltage5v.output5v() > 5)

}}

這樣,我們在客戶端就可以使用手機(手機類)完成測試:

public class adaptermode 

}

類介面卡模式的侷限性:

物件介面卡模式的基本思路與類介面卡模式基本一致,只是將adapter類稍作修改。它並沒有繼承src類,而是持有src類的例項,從而解決相容性的問題。在一定程度上也滿足了合成復用原則,即在系統中盡量使用關聯關係(聚合)來代替繼承關係。

這裡的場景與類的介面卡模式場景保持一致,具體實現如下:

修改介面卡角色,**如下:

/**

* 介面卡

*/public class voltageadapter implements voltage5v

@override

public int output5v()

return dest;

}}

相對於類介面卡和物件介面卡而言,介面介面卡更加靈活,就好比我們日常中使用的萬能介面卡,不管接入的是多少伏的電源,最終都能保證輸出電源為5v。其實現思路為:當不需要全部實現介面提供的方法時,可以先設計乙個抽象類實現介面,並為該介面中每個方法提供乙個預設實現(空方法),那麼該抽象類的子類就可以有選擇地覆蓋父類的某些方法來實現需求。具體實現如下:

定義乙個抽象的父類電源類:

public abstract class voltageall 

}

具體的實現類220v電壓:

public class voltage220v extends voltageall

}

具體的實現類110v電壓:

public class voltage110v extends voltageall

}

目標角色不做變動,介面卡角色如下:

public class voltageadapter implements voltage5v

public voltageadapter(voltage110v voltage110v)

@override

public int output5v()

return dest;

}}

測試類如下:

public class phone else if(voltage5v.output5v() > 5)

}}

public class adaptermode 

}

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...