美文网首页
结构型模式之适配器

结构型模式之适配器

作者: 0爱上1 | 来源:发表于2018-04-26 11:41 被阅读27次

    定义:

    对比现实生活中的场景,我们有个两孔插座,一个三头插头,如何将我们的插头插入到插座中呢?试想,如果没有一个转接的工具或者适配的工具,是不可能实现的。

    那么这个时候适配器出现了,它可以将我们的三头插头适配成两头的插头,这样就可以使用两孔插座啦

    原理:

    源类(被适配的类,我们已有的类)即:三头插头

    适配器 即:转接头

    目标类(我们想要的接口)即两头插头

    其实只要理解为。将我们已有的经过适配器转为我们想要的即可。

    代码实现:

    被适配对象:三头插头

    1

    目标类:两头插头接口,即客户端想要使用的接口,这里的客户端我们可以理解为一个两孔的插座。

    2

    适配器类:按照目标接口的要求对被适配对象实现接口形式的适配转换。即可以理解为将三头插头转为两头插头的类

    3

    客户端:调用目标类的类或者程序, 此处可以理解为一个两孔的插座,需要调用两头的插头接口以接入电源。

    4

    最终调用结果:

    5

    以上实现基于类适配器的方式实现。即适配器需要继承我们的被适配对象类,再实现我们的目标类接口。

    适配器模式的应用场景:

    当你想要使用的类无法提供符合要求的接口的时候,即我们的三头插头是我们想要使用的类,但是它无法提供我们符合要求的两头插头的接口,因为我们的客户端(两孔插座)是需要使用两头插头接口的。所以这个时候就可以采用适配器模式。作为接口转换工具。

    缺点:

    对于开发和维护来说,增加了一层额外的代码抽象。

    适配器种类对比:

    以上代码基于类适配器实现,下面分析类适配器和对象适配器的不同点

    类适配器:

        适配器继承被适配类,并实现目标类接口,完成适配工作,可以实现重写被适配对象的方法

    5

        但只能一个适配器适配一个被适配类,如果对于需要一个适配器适配多个被适配对象的化,就不行了,此时就需要使用对象适配器了。

        目标类必须为接口形式,比较局限。因为java的单继承,已经继承了被适配类了。

    对象适配器:灵活,用的比较多

        适配器类不需要继承被适配器类,而是采用组合被适配器类的形式。

        单个适配器与多个适配对象一起工作,包括适配对象及其所有子类,还能够同时向所有适配对象添加功能。

        但是很难去重写被适配器的方法。

    相关文章

      网友评论

          本文标题:结构型模式之适配器

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