适配器模式的核心:将一个接口,转换成一个客户希望的接口,Adapter可以使那些原来不兼容的接口不能一起工作的可以一起工作。
需要大概三个类:需要适配的类,期望转换的类,适配器本身的类
用途:主要针对老项目需要升级,大量采用适配器的模式
这是两种适配器(adapter和adapter2)的实现方式。
期望转换的类
package com.dasenlin.cn;
/**
* 适配器模式
* @author Administrator
* 想象(ps/2的键盘)
*/
public class Adaptee {
public void request(){
System.out.println("ps2的键盘接口可以实现输入的功能");
}
}
需要适配的类
package com.dasenlin.cn;
/**
* 笔记本
* @author Administrator
*
*/
public class Client {
public void usb(Target t){
t.handleRequest();
}
}
适配器本身的类(类适配器,单继承)
package com.dasenlin.cn;
/**
* 适配器本身,实现不同接口的相互兼容
* @author Administrator
*相当于usb和ps/2的转接器
*类适配器
*/
public class Adapter extends Adaptee implements Target {
@Override
public void handleRequest() {
super.request();
}
}
适配器本身的类(类适配器,对象参数适配)
package com.dasenlin.cn;
public class Adapter2 implements Target{
private Adaptee adaptee;
@Override
public void handleRequest() {
adaptee.request();
}
public Adapter2(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
}
需要实现功能的接口
package com.dasenlin.cn;
public interface Target {
void handleRequest();
}
main方法调用测试
//测试类内部实现的适配器
public static void main(String[] args) {
Client c = new Client();//usb
Target t = new Adapter();//内联的adapter
c.usb(t);
}
//测试参数传递的适配器
public static void main(String[] args) {
Client c = new Client();//usb
Adaptee ae = new Adaptee();//ps/2
Target t = new Adapter2(ae);//传递需要适配的参数
c.usb(t);
}