0%

适配器模式

[toc]

适配器模式#

当你试图引入一个外部jar包的api时, 担心这个jar包以后会换成别的, 或者因为包版本经常更新,api可能会变。
这时候可以用一个adpter来适配一下, 把这个api封装到自己的adpter里,然后再通过adapter提供给自己的代码使用。

0b43d0acc4ebf7c24233c420b0f3afa64f6c6783

注意第三方调用的方法名不是request,这就是经常会变动的地方,所以我们封住到adpter里使用。


Q: 类适配器模式和对象适配器模式的区别?#

A:
类适配器: 本身继承自需要适配的那个对象
118ad90eb040674630cb4a19e34490cd8ed5d0b3
对象适配器: 把需要适配的对象作为成员
57964df74fd72f44157e6d51628fee576d84361e


Q: 适配器模式的优点?#

A:

  1. 增加了调用类的透明性和复用性。 调用者无需关心内部实现,且容易复用给其他模块
  2. 灵活性和扩展性非常好, 内部api升级修改时,无需引发扩散修改。
    通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。

Q: 类适配器模式和对象适配器哪个好?为什么#

A:
建议用对象适配器,类适配器的限制较多。
类适配器的缺点:

  1. 对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
  2. 适配者类不能为最终类,如在Java中不能为final类,C#中不能为sealed类;
  3. 在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

Q: 讲一下适配器模式的应用#

A:


参考: 设计模式 | 适配器模式及典型应用