美文网首页
适配器模式

适配器模式

作者: 任教主来也 | 来源:发表于2017-03-20 13:21 被阅读18次

    介绍

    适配器是将两个不兼容的类融合在一起,有点像粘合剂,将不同的东西通过一种转换使得它们能够协作起来。

    例如,经常遇到两个没有关系的类型之间进行交互,第一个解决方案是修改各自类的接口,但是如果没有源码或者我们不愿意为了一个应用而修改各自的接口,此时我们可以使用一个 Adapter,这个 Adapter 会将这两个接口进行兼容,在不修改原有代码的情况下满足需求。

    定义

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

    使用场景

    1. 系统需要使用现有的类,而此类的接口不符合系统需求,即接口不兼容
    2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作
    3. 需要一个同一的输出接口,而输入接口的类型不可预知

    类适配器模式

    • Target 目标角色,也就是所期待的得到的接口,这里的目标不可以是类,必须是接口

    • Adaptee 需要适配的接口,也就是源接口

    • Adapter 适配器角色,本模式的核心,适配器把源接口转换成目标接口,这个角色不可以是接口,必须是具体类

    Target 是客户端想要得到的对象,而系统只提供源接口,这时候就通过 Adapter 实现 Target 接口,并继承源接口,在实现目标接口方法时,根据源接口的方法,实现目标接口的功能。最终将源接口转换成目标接口。

    对象适配器模式

    与类的适配模式一样,对象的适配器模式把被适配类的 API 转换成目标类的 API,与类适配器模式不同的是,对象的适配器模式不是使用继承关系连接到源接口类,而是使用代理关系连接到 Adapter 类。

    为了使客户端使用源接口的方法,提供了一个 Adapter,这个包装类包装了一个源接口的实例,并且 Adapter 实现了目标接口,从而包装类能够把 Adapter 的 API 和 目标类的 API 衔接起来,Adapter 中目标接口的实现根据源接口的实例来完成。Adapter 和源接口是委派关系,这决定了适配器模式是对象的。

    这种实现方式直接将要被适配的对象传递到 Adapter 中,使用组合的形式实现接口的兼容效果,比类适配器模式更灵活。另一个好处是被适配对象中的方法不会暴露出来,类适配器由于继承了源接口,所以源接口中的方法在 Adapter 中都有,是的 Adapter 中方法较多。因此对象适配模式更加灵活、实用。

    实际开发中 Adapter 除了应用于进行不兼容的类型转换,还有一种就是输入有无数种,但是输出类型是同一的,我们可以通过 Adapter 返回一个统一的输出,而具体的输入留给用户处理,内部只需要知道输出的是符合要求的类型即可。

    Android 源码中的适配器模式

    ListView 与 Adapter 的配合使用,我们需要使用 Adapter 加载每个 Item View 的布局,并且进行数据绑定等操作。Adapter 统一将 Item View 输出为 View ,这样就很好的应对了 Item View 的可变性。这虽然有些脱离 Adapter 模式将不兼容的接口转换为可用接口的使用场景,但也是 Adapter 模式的一种变种实现。

    优点

    • 更好的复用性,系统需要使用现有的类,而此类的接口不符合系统需要,通过适配器模式就可以让这些功能得到更好的复用
    • 更好的扩展性,在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能

    缺点

    过多使用时系统会非常凌乱,不易整体把握。例如命名看到的是调的 A 接口,实际内部被适配成了其他接口。

    相关文章

      网友评论

          本文标题:适配器模式

          本文链接:https://www.haomeiwen.com/subject/eagbnttx.html