适配器模式类似于电脑上各种转接口(如ps转usb),只要用该转接口连接两端产品,电脑就能适用。
使用情况:
1. 系统需要使用现有的类,但此类的接口不符合系统需要。
2. 想要建立一个可重复使用的类。用于一些彼此间没太大关联的一些类。包括一些可能在将来引进的类一起工作。
适配器模式,把一个类 的接口转换成客户端所期待的另一种接口。使得原本由于接口不兼容的那些类能正常使用。
从上图,Adaptee类没有sampleOperaton2()方法,而客户端则期待这个方法。为了能使客户端能够使用Adaptee类,需要提供一个包装类Apapter,
这个包装类包装了一个Adaptee的实例,从而能够把Adaptee的API与Target类的API衔接起来,从上图可以看出适配器模式所涉及的角色。
1. 目标(Target)角色
2. 源(Adaptee)角色
3. 适配器(Adapter)角色:适配器类是本模式核心,负责把源接口转换成目标接口。
/** * 被适配对象 ps键盘 */ public class Adaptee { public void request(){ System.out.println("可以完成客户需求"); } }
public interface Target { void handleRequest(); }
/**
* 适配器(相当于usb和ps2转接器)
*/
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
adaptee.request();
}
}
/** * 客户端类 * 相当于只有usb接口 */ public class Client { public void request(Target t) { t.handleRequest(); } public static void main(String[] args) { //usb Client client = new Client(); //ps2 Adapter adpater = new Adapter(new Adaptee()); client.request(adpater); } }
适配器模式用意是将接口不同而功能相同或相近的两个接口加以转换,转换接口含有源角色不具被的方法等。
在旧系统升级新系统中可以考虑适配器模式。