Adapter適配器模式--圖解設計模式


第二章: Adapter 模式

 

  Adapter模式分為兩種:

    1.類適配器模式

    2.委托適配器

    我看的是《圖解設計模式》這本書,這小鬼子說的話真難懂,只能好好看代碼理解。

 先說適配器模式要表達的什么意思,首先這個名字就很容易聯想到電源適配器,一個道理,我要充電,但你不能讓我直接把電線插進插座,這樣肯定會沖爆,我用不了這么多電啊! 這時候就需要一個適配器,給電壓轉換一下充的舒舒服服的,就這意思。

    實際發開中,有一個類庫寫了很多方法,但我只需要其中一兩個,那么就寫一個適配器,把這兩個方法拿出來用,要是出了Bug,就直接去Adapter里面找,而不是去翻那個類庫。

    

  實際編碼實現(類適配):

  Banner類所扮演的角色是(Adaptee(被適配)),它內部擁有兩個方法,很簡單的打印語句:

    

package example.adapter;

public class Banner {
    private String string;

    public Banner(String string) {
        super();
        this.string = string;
    }

    public void showWithPeren() {
        System.out.println("(" + string + ")");
    }

    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
}

 

    

   Print是需求,你需要什么?

 

package example.adapter;

public interface Print {
    
    public abstract void printWeak();

    public abstract void printStrong();
}

 

  

  PrintBanner是適配器,實現需求,繼承Banner,對外提供Banner的構造和需要的方法:

  

package example.adapter;

public class PrintBanner extends Banner implements Print{



    public PrintBanner(String string) {
        super(string);
    }

    @Override
    public void printWeak() {
        showWithPeren();
    }

    @Override
    public void printStrong() {
        showWithAster();
    }

}

 

 

  Main測試:

package example.adapter;

public class Main {
    public static void main(String[] args) {
        Print p = new PrintBanner("HelloWorld");
        p.printWeak();
        p.printStrong();
    }
}    

 

 

    實際編碼實現(委托):

    將Print和PrintBanner稍作改動:

    現在,PrintBanner里面擁有了Banner的成員並在構造方法里面實例化進行調用。

package example.adapter.two;

public class PrintBanner extends Print{
    
    private Banner banner;
    
    public PrintBanner(String string) {
        super();
        this.banner = new Banner(string);
    }

    @Override
    public void printWeak() {
            banner.showWithPeren();
    }

    @Override
    public void printStrong() {
            banner.showWithAster();
    }



}

 

 

 

  

package example.adapter.two;

public abstract class Print {
    
    public abstract void printWeak();

    public abstract void printStrong();
}

 

 

 

  

 

 

  

  


免責聲明!

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



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