定义:
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
特点:
客户端通过适配器可以透明地调用目标接口。(优点)
- 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。(优点)
- 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。(优点)
-
通常适用场景:
以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
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() {
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”); } }
- 对象适配器模式```java//将丑小鸭改变为天鹅的美丽外貌public interface Duck {void change();}public class Swan {public void beautiful(){System.out.println("美丽的天鹅");}}public class ChangeAdapter extends Swan implements Duck{@Overridepublic void change() {beautiful();}}public static void main(String[] args) {Duck duck = new ChangeAdapter();duck.change();}
- 类适配器模式 ```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(); } ```
