美文网首页设计模式
设计模式之适配器模式(Adapter Pattern)

设计模式之适配器模式(Adapter Pattern)

作者: 新生代农民工No1 | 来源:发表于2021-05-24 20:31 被阅读0次

    适配器模式简介

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
    适配器模式分为类结构型模式对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

    为什么使用适配器模式

    • 兼容:适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;
    • 复用:复用了现存的类;
    • 解耦:将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题;

    组件

    • 目标(Target):当前系统业务所期待的接口,它可以是抽象类或接口;
    • 适配器(Adaper):适配器类是本模式的核心,它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者;
    • 适配者(Adapee):它是被访问和适配的现存组件库中的组件接口;

    分类

    - 类结构型模式

    类适配器主要通过继承来适配两个接口。由于某些语言中的特性无法实现多继承,如Objective-C,虽然无法通过继承类的方式,但可以通过实现协议,同时又继承基类来实现。在Objective-C中实现类适配器,首先要有客户端要使用的一套行为的协议,然后要用具体的适配器类来实现该协议,同时适配器类也要继承被适配者。

    类结构型模式

    Adapter与Target(目标接口)是一个类型,与Adaptee(被适配的类)也是一个类型。Adapter重写Target的request方法,但没有重写Adaptee的specificRequest方法,而是在其request方法中调用父类的specificRequest方法(即:[super specificRequest])。当request方法在运行时,向Adaptee发送super消息时,Adaptee按自己的方式执行specificRequest方法。

    Note: 当Target是协议而不是类时,类适配器才能用Objective-C实现

    - 对象结构型模式

    被适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类而是使用委派关系连接到Adaptee类


    对象结构型模式

    Target和Adapter之间的关系与类适配器相同,而Adapter和Adaptee之间的关系从“继承”变成了“包含”。这种情况下Adapter会引用Adaptee对象,在request方法中,Adapter发送[adaptee specificRequest]消息,以间接调用Adaptee的specificRequest方法,然后实现客户端请求的其他部分。

    总结

    适配器模式可以很好的将目标类和适配者类解耦,并且增加的类的复用性以及透明性;同时还能够保证系统的灵活性和可扩展性,更换适配器或者增加新的适配器都非常方便,符合“开闭原则”;但是过多的使用适配器,会让系统调用很零乱,不容易定位到具体问题;所以在使用适配器模式的时候也要格外注意,避免一些不规范的操作;

    结尾:欢迎关注我的简书!您的鼓励是我最大动力!

    相关文章

      网友评论

        本文标题:设计模式之适配器模式(Adapter Pattern)

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