設計模式之適配器模式(Adapter)【Java實現】

適配器模式(Adapter Pattern):

定義

適配器模式(Adapter Pattern):將一個接口轉換成客戶希望的另一個接口,使接口不兼容的那些類可以一起工作,其別名爲包裝器(Wrapper)。適配器模式既可以作爲類結構型模式,也可以作爲對象結構型模式。

意圖:將一個類的接口轉換成客戶希望的另外一個接口。Adapter 模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

使用場景

在軟件系統中,由於應用環境的變化,常常需要將“一些現存的對象”放到新的環境中應用,但是新環境要求的接口是這些現存對象所不滿足的。

適配器(Adapter)模式的組成

目標抽象角色(Target):定義客戶要用的特定領域的接口。

適配器(Adapter):調用另一個接口,作爲一個轉換器,對Adaptee和Target進行適配,適配器類是適配器模式的核心,在對象適配器中,它通過繼承Target並關聯一個Adaptee對象使二者產生聯繫。

適配者(Ada[tee):定義一個接口(現有接口),Adapter需要接入。

客戶端(Client):協同對象符合Adapter適配器。

適配器分類

類適配器(採用繼承的方式)

對象適配器(採取對象組合的方式)推薦模式

缺省的適配器模式(AWT,Swing事件模型所採用的模式)

代碼實現(Java實現)

目標抽象角色(Target)

package pattern.adater;

public interface Target {
    public void method1();
}

適配者(Ada[tee)

package pattern.adater;

public class Adaptee {
    public void method2() {
        System.out.println("目標方法!");
    }
}
適配器(Adapter)【採用繼承方式,可以使用組合】

package pattern.adater;

public class Adapter extends Adaptee implements Target {

    @Override
    public void method1() {
        this.method2();
    }

}

客戶端(Client)【繼承方式】

package pattern.adater;

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

適配器(Adapter)【組合方式,推薦

package pattern.adater2;

public class Adapter implements Target {
    private Adaptee adpatee;
    
    public Adapter(Adaptee adaptee) {
        this.adpatee = adaptee;
    }
    
    public void method1() {
        adpatee.method2();
    }

}

 

客戶端(Client)【組合方式,推薦

package pattern.adater2;

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

缺省方式:

package pattern.defaultadapter;

public interface AbstractService {
    
    public void service1();
    public void service2();
    public void service3();
}
//空實現所有適配方式

package pattern.defaultadapter;

public class ServiceAdapter implements AbstractService {

    @Override
    public void service1() {
        
    }

    @Override
    public void service2() {
        
    }

    @Override
    public void service3() {
        
    }
    
}
//具體適配器只需要實現具體某一個方法

package pattern.defaultadapter;

public class ConcreteService extends ServiceAdapter {
    @Override
    public void service1() {
        System.out.println("執行業務方法");
    }
}
 

 

 

 

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