Adapter Pattern 適配器模式

適配器模式將某個類的接口轉化成客戶端期望的另一個接口表示,目的是消除由於接口不匹配所造成的類的兼容問題,約摸有一種亡羊補牢的感覺。主要分三類:類的適配器模式、對象的適配器模式、接口的適配器模式。

一、類的適配器模式

1、創建原始類

public class Source {
   public void method1(){
       System.out.println("Source的method1方法");
   }
}

2、創建接口,目的就是爲了兼容原始類

public interface Target{
    public void method1();
    punlic void method2();
}

3、實現接口

public class Adapter extends Source implements Target{
    @Override
    public void method2(){
        System.out.println("Adapter的method2的方法");
    }
}

4、編寫測試類,查看詳情

public class Test{
    public static void main(String[] args){
        Target target = new Adapter();
        target.method1();
        target.method2();
    }
}

5、運行後打印結果

Source的method1方法
Adapter的method2方法

由此可以看出,Target接口的實現類 Adapter 具有了 Source 類的功能,可以說Adapter對Source做了適配。

二、對象的適配器模式

基本思路和類的適配器模式相同,只是將Adapter類做修改,此次不再繼承Source類,而是持有Source類的實例,以達到兼容性的問題。

1、以上步驟省略,直接從創建Target實現類開始

public class Adapter implements Target {
   private Source source;
 
   public Adapter(Source source) {
       this.source = source;
   }
   @Override
   public void method1() {
      source.method1();
   }
   @Override
   public void method2() {
       System.out.println("Adapter的method方法");
   }
}

2、測試類如下

public class Test {
   public static void main(String[] args){
       Source source=new Source();
       Target target=new Adapter(source);
       target.method1();
       target.method2();
   }
}

3、結果如下

Source的method1方法
Adapter的method2方法

三、接口的適配器模式

有時,我們一個接口中有多個抽象方法,當我們寫該接口的實現類時,必須實現該接口的所有方法,這明顯是比較浪費的。因爲並不是所有的方法都是我們需要的,有時可能只需要一兩個。爲了解決這個問題,我們引入接口的適配器模式,藉助一個抽象類,該抽象類實現了該接口的所有的方法,而不和我們原始的接口打交道,只和抽象類之間有聯繫。所有我們需要一個類,繼承該抽象類,重寫我們需要的方法就可以了。

1、創建抽象類 Wraaper 來實現 Target 接口

public abstract class Wraaper implements Target{
    @OVerride
    public void method1(){
    }
    @Override
    public void method2(){
    }
}

2、創建繼承類

public class S1 extends Wraaper{
    @Override
    public void method1(){
        System.out.println("S1 的 method1");
    }
}


public class S2 extends Wraaper{
    @Override
    public void method2(){
        System.out.println("S2 的 method2");
    }
}

3、創建測試類

public class Test {
   public static void main(String[] args){
       S1 ss=new S1();
       S2 sm=new S2();
       ss.method1();
       ss.method2();
       sm.method1();
       sm.method2();
   }
}

適配器模式相對來說比較簡單,當項目升級時用到的可能性還是比較大的,故在此一記。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章