Java適配器模式的實現(xiàn)及應(yīng)用場景
介紹
Java中的適配器模式是一種結(jié)構(gòu)型設(shè)計模式,她將一個類的接口轉(zhuǎn)換成另一個客戶端所期望的接口.適配器模式讓那些不兼容的類可以一起工作,它通過不兼容接口轉(zhuǎn)換成可兼容接口來實現(xiàn)這一點.
適配器模式包含以下三個角色:
- 目標接口(Target):定義客戶端所期望的接口,也就是客戶端需要使用的接口.
- 源接口(Adaptee):已經(jīng)存在的,不兼容的接口,也就是需要適配的接口.
- 適配器(Adapter):將源接口轉(zhuǎn)換成目標接口的類,它實現(xiàn)了目標接口,并持有一個源接口的引用,將客戶端請求轉(zhuǎn)發(fā)給源接口.
在適配器模式中,適配器充當一個中間層,它將客戶端的請求轉(zhuǎn)換為目標類可以接受的格式.適配器通常由以下兩種實現(xiàn)方式:
- 類適配器模式:在類適配器模式中,適配器同時繼承了目標類和源類,并實現(xiàn)了目標接口.這使得適配器可以將源類的功能轉(zhuǎn)換成目標類的接口.
- 對象適配器模式:在對象適配器模式中,適配器持有源類的示例,并實現(xiàn)了目標接口.這使得適配器可以將源類的功能轉(zhuǎn)換成目標類的接口.
實現(xiàn)
假設(shè)我們有一個電源插頭,但是我們想要把它插在一個只能接受USB接口的設(shè)備上,這時候我們可以使用一個適配器來實現(xiàn).
目標接口
public interface USB { /** * 充電 */ void charge(); }
源接口
public class PowerSocket { /** * 提供電源 */ protected void powerSupply(){ System.out.println("提供電源"); } }
類適配器
public class PowerSocketToUSBAdapter extends PowerSocket implements USB { /** * 充電 */ @Override public void charge() { powerSupply(); System.out.println("轉(zhuǎn)換為USB充電..."); } }
對象適配器
public class PowerSocketToUSBAdapter1 implements USB{ private PowerSocket powerSocket; public PowerSocketToUSBAdapter1(PowerSocket powerSocket) { this.powerSocket = powerSocket; } /** * 充電 */ @Override public void charge() { powerSocket.powerSupply(); System.out.println("轉(zhuǎn)換為USB充電..."); } }
測試
public static void main(String[] args) { // 類適配器 USB usb1 = new PowerSocketToUSBAdapter(); usb1.charge(); System.out.println(); // 對象適配器 USB usb2 = new PowerSocketToUSBAdapter1(new PowerSocket()); usb2.charge(); } }
在這個例子中,PowerSocket是源接口,它提供了電源供應(yīng)的方法;USB是目標接口,它定義了充電的方法.
- **類適配器模式:**繼承PowerSocket類并實現(xiàn)USB接口,將PowerSocket轉(zhuǎn)換為USB充電
- **對象適配器模式:**將PowerSocket類通過構(gòu)造函數(shù)傳入到PowerSocketToUSBAdapter1中,并在charge()方法中調(diào)用PowerSocket的powerSupply()方法來提供電源
**類適配器和對象適配器的區(qū)別:**類適配器是類間繼承,對象適配器是對象的合成關(guān)系,也可以說是類的關(guān)聯(lián)關(guān)系,這是兩者的根本區(qū)別
總結(jié)
在Java中,對象適配器模式比類適配器模式更常用.這是因為對象適配器模式使用組合關(guān)系,可以更加靈活地替換被適配對象,也不會因為適配器的變化而影響到原有的繼承關(guān)系.此外,對象適配器也符合開閉原則,因此在需要增加新的適配器時,只需要實現(xiàn)適配器接口即可,無需修改原有代碼.而類適配器模式需要使用多繼承.而Java不支持多繼承,因此在Java中使用類適配器模式比較困難.
適配器模式是一種非常實用的設(shè)計模式,它可以幫助我們在不改變原有代碼結(jié)構(gòu)的情況下,將不兼容的接口進行適配,以滿足業(yè)務(wù)需求.
優(yōu)點
- 適配器模式可以讓接口之間的兼容性更好,能夠有效地復用現(xiàn)有的類.
- 適配器模式可以讓客戶端從具體實現(xiàn)中解耦,提高了代碼的靈活性和可維護性.
- 適配器模式可以增強系統(tǒng)的擴展性,可以在不影響系統(tǒng)穩(wěn)定性的前提下,方便的擴展新功能,
缺點
- 適配器模式需要增加一個適配器對象,增加了系統(tǒng)的復雜度.
- 適配器模式會影響代碼的可讀性和可理解性,需要仔細考慮如何命名和設(shè)計適配器類的接口.
應(yīng)用場景
- 當需要使用一個已經(jīng)存在的類,但是它的接口不符合要求的情況下,可以使用適配器模式進行適配.
- 當需要不同的類使用同樣的方法進行處理時,可以使用適配器模式進行適配.
- 當需要透明地使用一個類的子類或者擴展類時,可以使用適配器模式進行適配.
- 當需要將一個類集成到多個系統(tǒng)中時,可以使用適配器模式來保證系統(tǒng)之間的兼容性.
到此這篇關(guān)于Java適配器模式的實現(xiàn)及應(yīng)用場景的文章就介紹到這了,更多相關(guān)Java適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA 2020 安裝和常用配置(推薦)
這篇文章主要介紹了IntelliJ IDEA 2020 安裝和常用配置(推薦),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08java使用list實現(xiàn)數(shù)據(jù)庫的like功能
這篇文章主要介紹了java使用list實現(xiàn)數(shù)據(jù)庫的like功能,需要的朋友可以參考下2014-04-04mall整合SpringSecurity及JWT實現(xiàn)認證授權(quán)實戰(zhàn)
這篇文章主要為大家介紹了mall整合SpringSecurity及JWT實現(xiàn)認證授權(quán)實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06關(guān)于Java中的dozer對象轉(zhuǎn)換問題
Dozer是Java?Bean到Java?Bean映射器,它以遞歸方式將數(shù)據(jù)從一個對象復制到另一個對象,這篇文章主要介紹了Java中的dozer對象轉(zhuǎn)換的操作方法,需要的朋友可以參考下2022-08-08java實現(xiàn)從網(wǎng)絡(luò)下載多個文件
這篇文章主要為大家詳細介紹了java實現(xiàn)從網(wǎng)絡(luò)下載多個文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07詳解Spring Boot實戰(zhàn)之Filter實現(xiàn)使用JWT進行接口認證
本篇文章主要介紹了詳解Spring Boot實戰(zhàn)之Filter實現(xiàn)使用JWT進行接口認證,具有一定的參考價值,有興趣的可以了解一下2017-07-07