成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

巧妙的運用適配器模式,讓你的工作量至少能減輕一半!

開發(fā) 前端
適配器模式,可以讓任何兩個沒有關(guān)聯(lián)的類一起運行,提高了類的復(fù)用;但是,過多地使用適配器,會讓系統(tǒng)非常零亂,不易整體進(jìn)行把握。比如,明明看到調(diào)用的是另一個接口,反而另一個接口又回調(diào)了自身,一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災(zāi)難。

大家好,我是了不起,今天我們就一起來聊聊使用超廣的適配器模式!

一、摘要

適配器設(shè)計模式是一種結(jié)構(gòu)型模式

適配器模式,顧名思義,就是將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口,使接口不兼容的類可以一起工作,也被稱為包裝器模式(Wrapper)。

在適配器模式中,通常通過增加一個新的適配器類來解決接口不兼容的問題,使得原本沒有任何關(guān)系的類可以協(xié)同工作。

從設(shè)計的角度看,適配器模式涉及到三個角色:

  • 適配器類:適配器類可以調(diào)用另一個接口,從而實現(xiàn)接口的轉(zhuǎn)換;
  • 被適配類:被適配類定義了一個已經(jīng)存在的接口,這個接口需要適配;
  • 客戶角色:客戶類提出使用具體類的請求;

二、方案實踐

在 java 中,適配器模式有兩種,類適配器和對象適配器,下面我們一起來看看!

2.1、類適配模式

首先,我們創(chuàng)建一個接口Phone,接口的實現(xiàn)類為HuaweiPhone!

public interface Phone {

    void productPhone();
}
public class HuaweiPhone implements Phone {

    @Override
    public void productPhone() {
        System.out.println("生產(chǎn)一部華為手機");
    }
}

在創(chuàng)建另一個接口Player,如果Player的實現(xiàn)類想調(diào)用HuaweiPhone中的productPhone方法,該怎么辦呢?

最簡單的方法,就是將productPhone的方式邏輯抄一遍,但是這種方法顯然不高效!

可以通過創(chuàng)建一個適配器ExpensiveAdapter,使之繼承HuaweiPhone,來解決接口轉(zhuǎn)換的問題,如下:

public class ExpensiveAdapter extends HuaweiPhone implements Player {

    @Override
    public void action() {
        //調(diào)用HuaweiPhone中的productPhone方法
        productPhone();
        System.out.println("用手機播放音樂");
    }
}

測試類如下:

public class AdapterClient {

    public static void main(String[] args) {
        ExpensiveAdapter adapter = new ExpensiveAdapter();
        adapter.action();
    }
}

即可實現(xiàn)接口的轉(zhuǎn)換!

但是這種方法,也有很大的局限性,加入Phone接口的實現(xiàn)類有多個呢?

我們知道,類是無法多繼承的,對象適配模式就派上用場了!

2.2、對象適配模式

同樣的,我們可以對ExpensiveAdapter類進(jìn)行一定的優(yōu)化,如下:

public class ExpensiveAdapter implements Player {

    private Phone phone;

    public ExpensiveAdapter(Phone phone) {
        this.phone = phone;
    }

    @Override
    public void action() {
        //調(diào)用Phone接口中的productPhone方法
        phone.productPhone();
        System.out.println("用手機播放音樂");
    }
}

測試客戶端如下:

public class PlayerClient {

    public static void main(String[] args) {
        //對象適配
        ExpensiveAdapter adapter = new ExpensiveAdapter(new HuaweiPhone());
        adapter.action();
    }
}

相比類適配模式,有木有發(fā)現(xiàn)對象適配模式更加靈活~

三、應(yīng)用

在 jdk 中,適配器設(shè)計模式應(yīng)用也非常廣泛,例如我們熟悉的io包,其中字節(jié)流轉(zhuǎn)字符流,就使用到了適配器模式!

圖片圖片

圖片圖片

其中,最廣泛的莫過于Spring中的ioc對象依賴關(guān)系,在類A中,通過引入另一個類B 對象,就可以調(diào)用類 B 中的方法了,從而實現(xiàn)方法的協(xié)同工作!

四、總結(jié)

適配器模式,可以讓任何兩個沒有關(guān)聯(lián)的類一起運行,提高了類的復(fù)用;但是,過多地使用適配器,會讓系統(tǒng)非常零亂,不易整體進(jìn)行把握。比如,明明看到調(diào)用的是另一個接口,反而另一個接口又回調(diào)了自身,一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災(zāi)難。

同時,由于 JAVA 至多繼承一個類,所以至多只能適配一個適配者類,在設(shè)計的時候盡可能的選擇對象適配模式!

五、參考

1、https://www.runoob.com/design-pattern/adapter-pattern.html

2、https://www.jianshu.com/p/b3a00cca10de

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2021-07-26 07:32:48

模式適配器包裝器

2009-03-09 12:53:09

服務(wù)器虛擬化IDC虛擬機

2022-02-18 17:21:29

適配器模式客戶端

2022-02-13 23:33:24

設(shè)計模式Java

2020-10-25 08:56:21

適配器模式

2023-09-06 13:20:00

適配器模式兼容性

2012-08-02 10:46:34

JavaAdapter模式

2024-02-22 12:13:49

適配器模式代碼

2021-02-18 08:39:28

設(shè)計模式場景

2013-11-26 16:39:21

Android設(shè)計模式

2012-05-16 17:22:11

Java設(shè)計模式

2022-05-29 22:55:00

適配器設(shè)計模式

2021-02-16 08:16:09

適配器模式MybatisJava

2021-07-12 07:08:54

責(zé)任鏈模式對象

2009-11-18 18:08:20

PHP適配器模式

2012-09-19 15:29:26

Worklight適配器

2025-06-05 01:45:00

Spring框架適配器

2024-07-31 10:41:16

C#設(shè)計模式

2024-04-10 12:27:43

Python設(shè)計模式開發(fā)

2022-12-12 09:20:59

適配器模式接口
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 祝你幸福电影在线观看 | 亚洲精品片 | 一级毛片视频 | xx视频在线观看 | 亚洲国产精品一区二区三区 | 91视频麻豆| 成人免费看片网 | 久久国产欧美日韩精品 | 在线精品一区二区三区 | 国产成人免费视频 | 国产影音先锋 | 国内精品视频免费观看 | 中文字幕亚洲一区二区三区 | 久久激情五月丁香伊人 | 欧美精品中文字幕久久二区 | 亚洲在线一区二区 | 欧美中文一区 | 99久久中文字幕三级久久日本 | 一区二区三区四区av | 在线一区视频 | 中文字幕成人网 | 真人女人一级毛片免费播放 | 国产欧美一区二区三区在线看 | 99久9 | 亚洲欧美一区二区三区在线 | 久久久av一区 | 国产精品欧美精品 | 一区二区三区在线观看视频 | 日韩精品在线播放 | 欧美一级二级视频 | 国产高清视频一区二区 | 中文在线一区二区 | 91久久电影 | 国产农村妇女毛片精品久久麻豆 | 日本成人在线网址 | 国产伦一区二区三区视频 | 久久久男人的天堂 | 国产中文区二幕区2012 | 国产欧美日韩一区二区三区 | 久久草在线视频 | 免费观看的av毛片的网站 |