1. 程式人生 > >設計模式系列2——介面卡模式

設計模式系列2——介面卡模式

介面卡是一個介面轉換器,顧名思義,當我們得到的介面或者類與要求不匹配時,利用介面卡對其進行轉換,從而達到我們的要求。


介面卡模式一般包含三個角色:

1:Target(目標抽象類):是我們需要用的介面或者類樣式。

2:Adapter(介面卡類):將已有介面或類轉換為我們需要的樣式。

3:Adaptee(適配者類):已有的介面或者類,待轉換。


介面卡模式主要有三種:

1、類介面卡

2、物件介面卡

3、預設介面卡


一、類介面卡

//需要用到method2方法
public interface Target {
    public void method1(); 
    public void method2(); 
}

//然而已有類中沒有method2方法
public class Adaptee {
    public void method1(){}
}

//所以要使用(繼承)介面卡並設定目標(實現目標介面)
public class Adapter extends Adaptee implements Target {
    @Override
    public void method2() {
        //巴拉巴拉
    }
}

二、物件介面卡

//需要用到method1、2兩個方法
public interface Target {
    public void method1();
    public void method2(); 
}

//可是原類中只有一個該怎麼辦呢
public class Adaptee {
    public void method1(){}
}

public class Adapter {
    //只好在新類中定義原類的私有變數
    private Adaptee adaptee;
    public Adapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }
    public void method1(){
        this.adaptee.method1();
    }
    //並實現原類中沒有的方法
    public void method2(){
        //巴拉巴拉
    }
}

三、預設介面卡

//這個介面有太多方法
public interface Adaptee {
    void a();
    void b();
    void c();
    void d();
    void e();
    void f();
}

//只好新建一個抽象類來繼承它
public abstract class Adapter implements Adaptee {
    public void a(){}
    public void b(){}
    public void c(){}
    public void d(){}
    public void e(){}
    public void f(){}
}

//繼承抽象類就可以實現間接實現介面而不用實現其所有方法了
public class Target extends Adapter {
    public void a(){}
    public void d(){}
}