定义:

  • 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

    特点:

  • 客户端通过适配器可以透明地调用目标接口。(优点)

  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。(优点)
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。(优点)
  • 对类适配器来说,更换适配器的实现过程比较复杂 (缺点)

    通常适用场景:

  • 以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。

  • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

    demo代码:

  • 默认适配器模式(使用jdk8+的,接口可以使用默认方法了,可以省略中间转换的适配器了) ```java //jdk7以下的 //已知的一个接口,我只想实现start()方法 public interface Listener{ void start(); void create(); void change(); void delete(); void stop(); } //增加适配器 public class ListenerAdaptor implements Listener{ @Override public void start() {} @Override public void create() {} @Override public void change() {} @Override public void delete() {} @Override public void stop() {} } //自己要实现的类 public class Process extends ListenerAdaptor{ @Override public void start() {

    1. System.out.println("start");

    } }

//================================================================

//jdk8以上 //已知的一个接口,我只想实现start()方法 public interface Listener{ default void start(){} default void create(){} default void change(){} default void delete(){} default void stop(){} }

//自己要实现的类 public class Process implements Listener{ @Override public void start() { System.out.println(“start”); } }

  1. - 对象适配器模式
  2. ```java
  3. //将丑小鸭改变为天鹅的美丽外貌
  4. public interface Duck {
  5. void change();
  6. }
  7. public class Swan {
  8. public void beautiful(){
  9. System.out.println("美丽的天鹅");
  10. }
  11. }
  12. public class ChangeAdapter extends Swan implements Duck{
  13. @Override
  14. public void change() {
  15. beautiful();
  16. }
  17. }
  18. public static void main(String[] args) {
  19. Duck duck = new ChangeAdapter();
  20. duck.change();
  21. }
  • 类适配器模式 ```java //将丑小鸭改变为天鹅的美丽外貌 public interface Duck { void change(); }

public class Swan { public void beautiful(){ System.out.println(“美丽的天鹅”); } } public class ChangeAdapter implements Duck{

private Swan swan;

public ChangeAdapter(Swan swan){
    this.swan=swan;
}

@Override
public void change() {
    swan.beautiful();
}

}

public static void main(String[] args) { Swan swan =new Swan(); Duck duck =new ChangeAdapter(swan); duck.change(); } ```