资讯专栏INFORMATION COLUMN

设计模式(11)适配器模式(讲解+应用)

wums / 813人阅读

摘要:适配器模式将一个类的接口适配成用户所期待的。概念定义表明,适配器模式就是当前我们的接口是不符合我们使用要求的,我们通过适配器模式将其转化,即为将一个接口转化为另一个接口,然后再使用。

目录

适配器模式

为什么使用适配器模式?

适配器模式应用实例

适配器模式

说道适配器模式,大多数人肯定不会陌生,提及其英文名称,Adapter,搞过Android的一定会想到在对ListView进行填充的时候,我们所用到的setAdapter(),通过一个适配器来使得listview具有不同的形式,姿态。

适配器模式将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

概念定义表明,适配器模式就是当前我们的接口是不符合我们使用要求的,我们通过适配器模式将其转化,即为将一个接口转化为另一个接口,然后再使用。就好比,我们在给手机充电的时候,我们直接将usb线插进插座里,肯定是不可以的,我们需要将usb线先插入到一个适配器里,然后适配器插到插座上,我们才可以正常使用。这个概念理解起来还是相对比较简单的。

为什么使用适配器模式?

适配器是用来将将现有不适配接口转化为适配的接口,供给当下使用。借助之前的一个机器生产问题来举例,我们在机器生产后,进行销售的时候要进行以此包装,为了降低商店和具体机器的耦合,我们通过一个工厂模式来解决这个问题,实现一个依赖倒置,现在又有一个问题,出现了,我们的商店现在要出售一种在本商店一直没有出售过的机器,该机器的由于之前一直是在其它的商店销售,虽然其生产流程类似,但是其销售前的包装方式是不同的,现在转到我们的商店来,我们就有点犯愁了,我们不可能为了这一件产品而重新写代码之前的代码,但是该件商品还是要出售,我们可能想到打开该件商品去修改,但是该商品还在另一家店出售,有没有不用修改代码的方式呢?适配器就是来解决这个问题的,适配器可以出来大显身手了。
之前我们的代码是这样的。

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();
    }
}

我们商店引入的新机器是这样的

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视图的配置。

下篇更新迭代器模式

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64641.html

相关文章

  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • 前端资源收集整理

    摘要:工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 Github版本:Front-End Resource Collection 前端相关资源汇总 学习指导 精华文章 Web前端的路该怎么走?:文章超长,但是干货超级多,值得反复精读! 听说2017你想写前端?:适合于已经度过了小白阶...

    awesome23 评论0 收藏0
  • 前端资源收集整理

    摘要:工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 Github版本:Front-End Resource Collection 前端相关资源汇总 学习指导 精华文章 Web前端的路该怎么走?:文章超长,但是干货超级多,值得反复精读! 听说2017你想写前端?:适合于已经度过了小白阶...

    antyiwei 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<