GOF对适配器的定义是:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能在一起工作的哪些类可以在一起工作。
基本代码如下:
public class Target {
public void Request() {
System.out.println("客户发起了普通的请求");
}
}
public class Adaptee {
public void SpecificRequest() {
System.out.println("客户发起的特殊请求");
}
}
客户有普通和特殊两种不同的需求实现,使用适配器类
/**
*
* @author 小青
* @Time 下午6:49:39
* @Function:适配器类
*
*/
public class Adapter extends Target {
private Adaptee adaptee = new Adaptee();
@Override
public void Request() {
// TODO Auto-generated method stub
adaptee.SpecificRequest();
}
}
适配器又被称为包装类,客户端代码
public class Client {
public static void main(String[] args) {
//客户的基本请求
Target target = new Target();
target.Request();
//客户的特殊请求
target = new Adapter();
target.Request();
}
}
运行截图
可以看到,客户在前后两种不同的请求上,通过适配器能很好的使用“看上去”一样的方法实现。一般,在一个新项目中,一些所需要的类在旧项目中就已经存在,但由于接口的不同导致类无法被复用,而项目时间紧张不能改造已有的类,这时候就是适配器大显身手的时候了。还一种情况是新的项目需要使用第三方组件但是第三方组件与新系统不兼容时,开发人员可以使用适配器来实现兼容。
适配器在生活中也是有着应用的,例如电脑电源线上的黑盒子,就是一个适配器,无论充电电压是国内的220V还是国外的110V,有适配器进行转化,都可以正常进行充电。
需要注意的是,虽然与客户端进行通信的是适配器,但是真正进行工作的却是笔记本。适配器不是替代原有的类,仅仅是一个包装的过程。
以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载