java設計模式之淺談適配器模式

一、結構型模式

結構型模式有什麼好處?
從程序的結構上實現松耦合,從而可以擴大整體的類結構,用來解決更大的問題

二、適配器模式

USB網線轉換器

在這裡插入圖片描述

三、什麼是適配器模式?

將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本接口不兼容而不能一起工作的那些類能夠變得在一起工作!

四、角色分析

目標接口:客戶所期待的接口,目標可以是具體的或抽象的類,也可以是接口
需要適配的類:需要適配的類或適配者類
適配器:通過包裝一個需要適配的對象,把原接口轉換成目標對象!
例子:

適配的類:網線

package com.jialidun.gof.adapter;

//要被適配的類:網線
public class Adaptee {

    public void request(){
        System.out.println("連接網線上網!");
    }
}

接口轉換器的抽象方法

package com.jialidun.gof.adapter;

//接口轉換器的抽象實現
public interface NetToUsb {

    //作用:處理請求 網線插到USB上
    public void hanleRequest();

}

真正的適配器,需要連接USB,連接網線

package com.jialidun.gof.adapter;

//真正的適配器,需要連接USB,連接網線
//方式1 繼承(類適配器、單繼承)
public class Adapter extends Adaptee implements NetToUsb{


    @Override
    public void hanleRequest() {
        super.request();//可以上網瞭
    }
}

創建客戶端,需要上網,網線不匹配

package com.jialidun.gof.adapter;

//客戶端類:想上網,插不上網線
public class Computer {

    //我們的電腦需要連接上轉接器才可以上網
    public void net(NetToUsb adapter){
        //上網的具體實現,找一個轉接頭

        adapter.hanleRequest();

    }

    public static void main(String[] args) {
        //電腦  適配器  網線
        Computer computer = new Computer();//電腦
        Adaptee adaptee = new Adaptee();//網線
        Adapter adapter = new Adapter();//轉接器

        computer.net(adapter);



    }
}

上面的例子有局限性,盡量不使用繼承,修改方法

修改適配器

package com.jialidun.gof.adapter;

//方式2  組合(對象適配器、常用)
public class Adaapter2 implements NetToUsb{
    private Adaptee adaptee;

    public Adaapter2(Adaptee adaptee){
        this.adaptee = adaptee;
    }


    @Override
    public void hanleRequest() {
        adaptee.request();
    }
}

客戶端

package com.jialidun.gof.adapter;

//客戶端類:想上網,插不上網線
public class Computer {

    //我們的電腦需要連接上轉接器才可以上網
    public void net(NetToUsb adapter){
        //上網的具體實現,找一個轉接頭

        adapter.hanleRequest();

    }

    public static void main(String[] args) {
        //電腦  適配器  網線
//        Computer computer = new Computer();//電腦
//        Adaptee adaptee = new Adaptee();//網線
//        Adapter adapter = new Adapter();//轉接器
//
//        computer.net(adapter);


        Computer computer = new Computer();//電腦
        Adaptee adaptee = new Adaptee();//網線
        Adaapter2 adaapter2 = new Adaapter2(adaptee);
        adaapter2.hanleRequest();



    }
}

在這裡插入圖片描述

五、對象適配器有哪些優點

1.一個對象適配器可以把多個不同的適配者適配到同一個目標。

2.可以適配一個適配者的子類,由於適配器和適配者之間是關聯關系,根據”裡氏替換原則”,適配者的子類也可通過該適配器進行適配。

六、類適配器缺點

對於Java、C#等不支持多重類繼承的語言,一次最多隻能適配一個適配者類,不能同時適配多個適配者;
在Java、C#等語言中,類適配器模式中的目標抽象類隻能為接口,不能為類,其使用有一定的局限性。

七、使用場景

系統需要使用一些現有的類,而這些類的接口(如方法名)不符合系統的需求,甚至沒有這些類的源代碼。
想創建一個重復使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
例如SpringMVC中DispacherServlet、HandlerAdpter等

到此這篇關於java設計模式之淺談適配器模式的文章就介紹到這瞭,更多相關java適配器模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: