适配器模式

来源:互联网 发布:relex软件 破解版 编辑:程序博客网 时间:2024/06/05 16:51

概念

适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

分类

  • 类适配器
    通过多重继承来适配被适配者
  • 对象适配器
    通过组合来适配被适配者

适用场景

  • 当需要适用一个现有的类而其接口并不符合你的需要时,就是用适配器
  • 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

结构

对象适配器

对象适配器

类适配器

类适配器
- 目标(Target):定义Client使用的与特定领域相关的接口。
- 客户(Client):与符合Target接口的对象协同
- 被适配者(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要适配。
- 适配器(Adapte) :适配器模式的核心。它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配

优缺点

优点

  1. 该模式通过创建适配器进行接口转换,让不兼容的接口变成兼容。让客户从实现的接口解耦。
  2. 将客户和接口绑定起来,而不是和实现绑定起来。
  3. 对于类适配器
    (1)不需要重新实现整个被适配者。必要的时候,可以覆盖被适配者的行为,因为类适配器利用的是继承方式
    (2)仅仅需要一个类适配器,而不需要一个适配器和一个被适配者
    对于对象适配器
    (1)不仅可以适配某个类,也可以适配该类的任何子类
    (2)采用的是组合方式,更有弹性
    (3)加进适配器代码中的任何行为,都可以和被适配者类以及其所有子类搭配工作

缺点

  1. 对于类适配器,用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作
  2. 对于对象适配器,使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配

与装饰者模式的区别

适配器将一个对象包装起来以改变其接口,装饰者将一个对象包装起来以增加新的行为和责任

适配器的目的是将已有对象的接口转换为用户期望的接口,允许客户使用新的库和子集合,无需改变“任何”代码,专注于“转换工作”。
装饰者也需要将对象包装起来,但它的工作全都是和“责任”相关的,一旦涉及到装饰者,就表示有一些新的行为或责任要加入到你的设计中,即装饰者的责任是扩展包装的对象的行为或责任。而且对于装饰者,可能还会有更多的装饰者将它再次包装起来,当一个方法调用委托给它时,它根本不知道有多个其他装饰者已经处理过这个调用。

原创粉丝点击