设计模式(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视图的配置。

下篇更新迭代器模式

相关文章
相关标签/搜索