生活中的场景




什么是适配器模式

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


适配器模式中的角色

  • 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口
  • 需要适配的类(Adaptee):需要适配的类或适配者类
  • 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口



适配器模式解决方案







类适配器方式

被适配的类:外接键盘.java

package 设计模式.适配器模式;

/**
* 被适配的类
*
* @author 陈霓清
*/
public class 外接键盘 {

public void doSomething() {
System.out.println("可以开始干活了");
}
}


目标接口:USB接口.java

package 设计模式.适配器模式;

/**
* 目标接口
*
* @author 陈霓清
*/
public interface USB接口 {

// 处理请求
void handleReq();
}


适配器

package 设计模式.适配器模式;

/**
* 适配器 (类适配器方式)
*
* @author 陈霓清
*/
public class 适配器 extends 外接键盘 implements USB接口 {

/**
* 处理请求
*/
@Override
public void handleReq() {
super.doSomething();
}

}

客户端类:笔记本电脑.java
package 设计模式.适配器模式;

/**
* 客户端类
* 相当于笔记本电脑,只有USB接口
*
* @author 陈霓清
*/
public class 笔记本电脑 {

public void test(USB接口 usb) {
usb.handleReq();
}

public static void main(String[] args) {
笔记本电脑 notebook = new 笔记本电脑();

USB接口 usb = new 适配器();

notebook.test(usb);
}

}


对象适配器方式,使用了组合的方式跟被适配对象整合

适配器

package 设计模式.适配器模式;

/**
* 适配器 (对象适配器方式,使用了组合的方式跟被适配对象整合)
*
* @author 陈霓清
*/
public class 适配器2 implements USB接口 {

private 外接键盘 keyboard;

/**
* 处理请求
*/
@Override
public void handleReq() {
keyboard.doSomething();
}

public 适配器2(外接键盘 keyboard) {
super();
this.keyboard = keyboard;
}

}


客户端类:笔记本电脑.java

package 设计模式.适配器模式;

/**
* 客户端类
* 相当于笔记本电脑,只有USB接口
*
* @author 陈霓清
*/
public class 笔记本电脑 {

public void test(USB接口 usb) {
usb.handleReq();
}

public static void main(String[] args) {
笔记本电脑 notebook = new 笔记本电脑();

外接键盘 keyboard = new 外接键盘();
USB接口 usb = new 适配器2(keyboard);

notebook.test(usb);
}

}



回到顶部