設計模式五:適配器模式 – JAVA編程語言程序開發技術文章

定義:
將一個類的接口轉換成客戶希望的另外一個接口。
目標(Target)角色:定義Client使用的接口。
被適配(Adaptee)角色:這個角色有一個已存在並使用瞭的接口,而這個接口是需要我們適配的。
適配器(Adapter)角色:這個適配器模式的核心。它將被適配角色已有的接口轉換為目標角色希望的接

分類:

類適配器模式
適配器角色對於被適配角色的適配是通過繼承完成的。由於在java中不支持多重繼承,而且繼承有破壞封裝之嫌,眾多的書中(包括《設計模式》)都提倡使用組合來代替繼承。

 

類適配器模式類圖

 

對象適配器模式
適配器角色對於被適配角色的適配是通過組合來完成的。
 

對象適配器模式類圖

 

舉例:

類圖

 

 

源碼

[java] 
/**
 * 測試類
 */ 
public class Test { 
 
    public static void main(String[] args) { 
        //給HTC手機充電 
        Charger htcCharger = new HtcCharger(); 
        htcCharger.exportPower(); 
         
        //給N97手機充電 
        Charger n97Charger = new N97Charger(); 
        n97Charger.exportPower(); 
         
        //給N98手機充電 
        Charger n98Charger = new N98Charger(); 
        n98Charger.exportPower(); 
    } 
 

[java] 
/**
 * 充電器接口
 */ 
public interface Charger { 
 
    //輸出電流 
    public void exportPower(); 
     

[java]
/**
 * HTC充電器
 */ 
public class HtcCharger implements Charger{ 
 
    @Override 
    public void exportPower() { 
        System.out.println("HTC充電器:輸出5V電壓!"); 
    } 
 

[java] 
/**
 * N97充電器,類的適配器模式
 */ 
public class N97Charger extends NokiaCharger implements Charger{ 
 
    @Override 
    public void exportPower() { 
        if(!this.check()){ 
            this.export(); 
            System.out.println("N97手機:充電中……"); 
        } 
    } 
 

[java]
/**
 * N98充電器,對象的適配器模式
 */ 
public class N98Charger implements Charger{ 
 
    private NokiaCharger nokiaCharger = new NokiaCharger(); 
     
    @Override 
    public void exportPower() { 
        if(!nokiaCharger.check()){ 
            nokiaCharger.export(); 
            System.out.println("N98手機:充電中……"); 
        } 
    } 
 

[java]
/**
 * 諾基亞充電器
 */ 
public class NokiaCharger { 
 
    public boolean check(){ 
        System.out.println("諾基亞充電器:檢查電池電量!"); 
        return false; 
    } 
     
    public void export(){ 
        System.out.println("諾基亞充電器:開始充電!"); 
    } 
     

 

發佈留言