适配器模式定义:通过一个类的接口转换成用户希望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式可以分为类适配器和对象适配器,类适配器使用继承关系来对类进行适配,对象适配器使用对象引用来进行适配。
适配器模式图:
适配器模式参与者;
target:Client所使用的目标接口,可以是接口或者抽象类。
Adaptee:需要适配的类的接口。
Adapter:适配器,负责Adaptee的接口与Target接口进行适配。
Client:与符合Target接口的对象协调的类。
类适配器模式代码示例:
package com.tian.adapter;
/**
* PS2接口
* @author Administrator
*
*/
public interface PS2 {
public void ps2();
}
package com.tian.adapter;
public interface USB {
public void usb();
}
package com.tian.adapter;
public class USBImpl implements USB {
@Override
public void usb() {
System.out.println("我是USB接口。。。。。");
}
}
package com.tian.adapter;
/**
* 适配器
* @author Administrator
*
*/
public class AdapterClass extends USBImpl implements PS2 {
@Override
public void ps2() {
super.usb();
}
}
package com.tian.adapter;
public class Client {
public static void main(String[] args) {
PS2 ps2 = new Adapter();
ps2.ps2();
}
}
说明:
这里是将PS2插口转为USB插口进行示例的。PS2接口是PS2插口的格式规定,USB接口是USB插口的格式规范,USBImpl类是USB接口的具体实现,Adapter类是将PS2插口转为USB插口的实现过程。
对象适配器模式代码示例:
还是基于PS2插口转USB插口示例,这里只需要修改下适配器类就可以实现对象适配器模式,如下:
package com.tian.adapter;
public class AdapterObject implements PS2 {
private USB usb;
public AdapterObject(USB usb) {
this.usb = usb;
}
@Override
public void ps2() {
usb.usb();
}
}
说明:
这里的适配器类有一个有参的构造函数,通过这个构造函数将对象传入适配器类。
适配器模式有点:
1、将目标类和适配者类解耦,通过引入一个适配器来服用现有的逻辑,无需修改。
2、增加类的透明性和复用性,将具体的业务实现过程封装在适配者勒种,对于用户而言是透明的,统一个适配者类可以在多个不同的系统中使用
3、灵活性和扩展性非常好,
适配器模式的缺点:
1、一次只能适配一个适配者类,不同同时适配多个适配者
2、太多的适配器会使得代码显得有点凌乱