一: 定义:
将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作
适配器模式的别名为包装器(Wrapper)模式,它既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合。
二:结构图:
由图可知适配器模式包含一下三个角色:
1:Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。
2:Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。它是适配器模式的核心。
3:Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法。
三:实现:
**
* 被适配的类
* 相当于项目中的PS/2键盘
* @author jack
*/
public class Adaptee {
public void request(){
System.out.println("被适配的类,处理客户端的请求!!!");
}
}
/**
* 适配器,相当于USB-->PS/2接口(类适配器的方式)
* @author jack
*
*/
public class Adapter1 extends Adaptee implements Target{
@Override
public void handleRequest() {
super.request();
}
}
/**
* 组合方式的适配器(因为java是的单继承,多实现)
* @author jack
*
*/
public class Adapter2 implements Target{
private Adaptee adaptee;
public Adapter2(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
adaptee.request();
}
}
/**
* 客户端类,相当于例子中的笔记本(USB接口 );
* @author jack
*
*/
public class Client {
public void test(Target t){
t.handleRequest();
}
public static void main(String[] args) {
/* Client client = new Client();//笔记本(USB)
Target t=new Adapter1();//适配器(USB-> PS/2)
client.test(t);*/
Client client = new Client();//笔记本(USB)
Adaptee adaptee = new Adaptee();//键盘(PS/2)
Target t=new Adapter2(adaptee);//适配器(USB-> PS/2)
client.test(t);
}
}
public interface Target {
void handleRequest();
}