作用

将一个类的接口转换成期望的另一个接口
使原本不兼容的类可以一起工作
使原有对象和新接口匹配

不是软件设计阶段考虑的设计模式
更多像是开发过程中的代码优化

demo设计

被适配的类

假设有一个类已经写好了,但是与新写的接口不兼容

  1. public class Adaptee {
  2. public void adapteeRequest() {
  3. System.out.println("被适配的方法");
  4. }
  5. }

新接口

假设新的代码中要基于此接口实现业务逻辑

  1. public interface Target {
  2. void request();
  3. }

实现类

实现Target接口,这是一个很常见的用法

  1. public class ConcreateTarget implements Target {
  2. @Override
  3. public void request() {
  4. System.out.println("concreateTarget目标方法");
  5. }
  6. }

使原有类适配新接口

Adaptee和Target接口并不兼容,所以在此需要写一个类用于适配Target接口

使用继承的方式

继承原有类,并实现新接口,在接口的实现方法中调用父类方法,完成适配

  1. public class Adapter extends Adaptee implements Target {
  2. @Override
  3. public void request() {
  4. super.adapteeRequest();
  5. }
  6. }

使用组合的方式

不继承原有类,只实现新接口,需要在使用原有类类型的成员变量

  1. public class Adapter implements Target {
  2. private Adaptee adaptee = new Adaptee();
  3. @Override
  4. public void request() {
  5. adaptee.adapteeRequest();
  6. }
  7. }

更推荐组合的方式实现适配器模式

小结

使得原有的类通过适配器来兼容新的接口,而且不需要动原有的代码
每有一个需要被适配的类,都需要写一个用于适配的类