設計模式(11)適配器模式(講解+應用)

目錄this

  1. 適配器模式code

  2. 爲何使用適配器模式?繼承

  3. 適配器模式應用實例接口

適配器模式

說道適配器模式,大多數人確定不會陌生,說起其英文名稱,Adapter,搞過Android的必定會想到在對ListView進行填充的時候,咱們所用到的setAdapter(),經過一個適配器來使得listview具備不一樣的形式,姿態。three

適配器模式將一個類的接口適配成用戶所期待的。一個適配容許一般由於接口不兼容而不能在一塊兒工做的類工做在一塊兒,作法是將類本身的接口包裹在一個已存在的類中。產品

概念定義代表,適配器模式就是當前咱們的接口是不符合咱們使用要求的,咱們經過適配器模式將其轉化,即爲將一個接口轉化爲另外一個接口,而後再使用。就比如,咱們在給手機充電的時候,咱們直接將usb線插進插座裏,確定是不能夠的,咱們須要將usb線先插入到一個適配器裏,而後適配器插到插座上,咱們才能夠正常使用。這個概念理解起來仍是相對比較簡單的。it

爲何使用適配器模式?

適配器是用來將將現有不適配接口轉化爲適配的接口,供給當下使用。藉助以前的一個機器生產問題來舉例,咱們在機器生產後,進行銷售的時候要進行以此包裝,爲了下降商店和具體機器的耦合,咱們經過一個工廠模式來解決這個問題,實現一個依賴倒置,如今又有一個問題,出現了,咱們的商店如今要出售一種在本商店一直沒有出售過的機器,該機器的因爲以前一直是在其它的商店銷售,雖然其生產流程相似,可是其銷售前的包裝方式是不一樣的,如今轉到咱們的商店來,咱們就有點犯愁了,咱們不可能爲了這一件產品而從新寫代碼以前的代碼,可是該件商品仍是要出售,咱們可能想到打開該件商品去修改,可是該商品還在另外一家店出售,有沒有不用修改代碼的方式呢?適配器就是來解決這個問題的,適配器能夠出來大顯身手了。
以前咱們的代碼是這樣的。table

public class Store{

    Store(){
        MachineFactory factory = new MachineFactory();
    }

    public void order(String type){
         Machine machine= factory.create(type);
        machine.firstPack();
        machine.secondPack();
        machine.thirdPack();
        machine.fourthPack();
    }
}

咱們商店引入的新機器是這樣的class

public class InflatableDoll extends Machine{

    public void onePack(){
        System.out.prinltn("Add first pack to protect");
    }

    public void twoPack(){
        System.out.prinltn("Add second pack to protect");
    }

    public void threePack(){
        System.out.prinltn("Add third pack to protect");
    }

    public void fourPack(){
        System.out.prinltn("Add fourth pack to protect");
    }
}

適配器大顯身手配置

public class InflatableDollAdapter extends Machine{

    InflatableDoll doll;

    MachineAdapter(InflatableDoll doll){
        this.doll = doll;
    }

     public void firstPack(){
         doll.onePack();
    }

    public void secondPack(){
        doll.twoPack();
    }

    public void thirdPack(){
        doll.threePack();
    }

    public void fourthPack(){
        doll.fourPack();
    }
}

商店中的order方法能夠這樣來寫

public void order(String type){
        Machine machine;
        if(type=="InflatableDoll")
            machine = InflatabelDollAdapter(factory.create(type));
        else
            machine=factory.create(type);
        machine.firstPack();
        machine.secondPack();
        machine.thirdPack();
        machine.fourthPack();
    }

不適配的問題解決了,適配器類將原有的類包起來,經過委託來實現功能的適配。這個例子不是很好,因這樣若是後來須要適配的類持續增多,這個將變得很臃腫,這裏主要藉助這個例子方便你們理解這個適配器的這個實現過程。

適配器應用實例

上面提到Android中的listview,由於不一樣的Listview所要呈現的視圖也是不一樣的,爲了應對這種變化,就經過一個適配器來將這種變化和咱們的ListView實現一個隔離和適配。咱們能夠經過一個繼承自BaseAdapter類來實現本身的適配器,來將咱們對ListView中的每個item視圖的配置。

下篇更新迭代器模式

相關文章
相關標籤/搜索