設計模式之適配器模式案例詳解


基本介紹

適配器模式將某個類的接口轉換成客戶端期望的另一個接口表示,主要目的是兼容性,讓原本因接口不匹配不能一起工作的兩個類可以協同工作。

適配器模式屬於結構性模式,主要分為三類:類適配器模式、對象適配器模式、接口適配器模式。

類適配器模式

什么是類適配器模式

類適配器模式介紹:Adapter類,通過集成src類,實現dst類接口,完成src>dst的適配。

應用實例

案例

以生活中充電器的例子來講解適配器,充電器本身相當於Adapter,220V交流電相當於src(即被適配者),我們的dst(即目標)是5V直流電。

思路分析

代碼實現

1//被適配的類
2public class Voltage220V {
3    //輸出220V的電壓
4    public int output220V(){
5        int src=220;
6        System.out.println("電源電壓="+src+"伏");
7        return src;
8    }
9}

1//適配接口
2public interface IVoltage5V {
3    int output5V();
4}

1public class VoltageAdapter extends Voltage220V implements IVoltage5V {
2    @Override
3    public int output5V() {
4        int srcV = output220V();//獲取220V的電壓
5        int dstV = srcV / 44;//進行處理
6        return dstV;
7    }
8}

 1public class Phone {
2    //充電
3    public void charging(IVoltage5V iVoltage5V){
4        if (iVoltage5V.output5V()==5){
5            System.out.println("現在電壓為5V,可以充電");
6        }else if (iVoltage5V.output5V()>5){
7            System.out.println("現在電壓大於5V,可以充電");
8        }
9    }
10}

1public class Client {
2    public static void main(String[] args) {
3        Phone phone = new Phone();
4        phone.charging(new VoltageAdapter());
5    }
6}

類適配器模式注意事項和細節

Java是單繼承機制,所以類適配器需要繼承src類這一點算是一個缺點,因為這要求dst必須是接口,有一定局限性。

src類的方法在Adapter中都會暴露出來,也增加了使用的成本。

由於其繼承了src類,所以它可以根據需求重寫src類的方法,使得Adapter的靈活性增強了。

對象適配器模式

什么是對象適配器模式

基本思路和類的適配器模式相同,只是將Adapter類作修改,不是繼承src類,而是持有src類的實例,以解決兼容性的問題。即:持有src類,實現dst類接口,完成src>dst的適配。

根據“合成復用原則”,在系統中盡量使用關聯關系來替代繼承關系。

對象適配器模式是適配器模式常用的一種。

應用實例

案例

以生活中充電器的例子來講解適配器,充電器本身相當於Adapter,220V交流電相當於src(即被適配者),我們的dst(即目標)是5V直流電,使用對象適配器模式完成。

思路分析

代碼實現

 1public class VoltageAdapter implements IVoltage5V {
2
3    private Voltage220V voltage220V;
4
5    //通過構造器傳入
6    public VoltageAdapter(Voltage220V voltage220V) {
7        this.voltage220V = voltage220V;
8    }
9
10    @Override
11    public int output5V() {
12        int dst = 0;
13        if (null != voltage220V) {
14            int src = voltage220V.output220();
15            dst = src / 44;
16        }
17        return dst;
18    }
19}

1public class Client {
2    public static void main(String[] args) {
3        Phone phone = new Phone();
4        phone.charging(new VoltageAdapter(new Voltage220V()));
5    }
6}

對象適配器注意事項和細節

對象適配器和類適配器其實算是同一種思想,只不過實現方式不同。根據合成復用原則,使用組合替代繼承,所以它解決了類適配器必須繼承src的局限性問題,也不再要求dst必須是接口。

使用成本更低更靈活。

接口適配器模式

什么是接口適配器模式

當不需要全部實現接口提供的方法時,可先設計一個抽象類實現接口,並為該接口中每個方法提供一個默認實現(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求。

適用於一個接口不想使用其所有的方法的情況。

應用實例

思路分析

代碼實現

1public interface Interface4 {
2    void m1();
3    void m2();
4    void m3();
5    void m4();
6}

 1//在AbsAdapter中我們將Interface4的方法進行默認實現
2public abstract class AbsAdapter implements Interface4 {
3    @Override
4    public void m1() {
5    }
6
7    @Override
8    public void m2() {
9    }
10
11    @Override
12    public void m3() {
13    }
14
15    @Override
16    public void m4() {
17    }
18}

 1public class Client {
2    public static void main(String[] args) {
3        AbsAdapter absAdapter= new AbsAdapter(){
4            @Override
5            public void m1() {
6                System.out.println("使用了m1的方法");
7            }
8        };
9        absAdapter.m1();
10    }
11}

適配器模式的注意事項和細節

三種命名方式是根據src是以怎樣的形式給到Adapter(在Adapter里的形式)來命名的。

  • 類適配器:以類給到,在Adapter里,將src當做類,繼承。
  • 對象適配器:以對象給到,在Adapter里,將src作為一個對象,持有。
  • 接口適配器:以接口給到,在Adapter里,將src作為一個接口,實現。

Adapter模式最大的作用還是將原本不兼容的接口融合到一起工作。
實際開發中,實現起來不拘泥於我們講解的三種經典形式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM