适配器模式(Adapter pattern)
概念
网线转换头,用过没!插usb上滴!!就是它!
术语:将一个类的接口转换成客户希望的另外一个接口
作用
使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
工作中的场景(用来做旧系统改造和升级)
如果我们的系统开发之后再也不需要维护,那么很多模式都是没有必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍
Java中场景
字节流到字符流的转换
InputStreamReader(InputStream)
OutputStreamWriter(OutputStream)
案例(电脑键盘)
创建被适配的类(键盘)---提供一个完成功能需求方法(如打字)
/*
* 被适配的类-----键盘(提供了一个需求)
*/
public class Adaptee {
public void request(){
System.out.println("可以完成客户端需要的功能!");
}
}
创建客户端类(电脑)---只有一个USB接口
/*
* 客户端类-------电脑(只有USB接口)
*/
public class Client {
public void test(Target t){
t.handle();
}
}
USB接口
/*
* usb接口
*/
public interface Target {
public abstract void handle();
}
很显然,想要在客户端Client(电脑)中调用被适配类Adaptee(键盘)中的request方法是完成不了的
加入适配器类
/*
* 适配器
* 实现了USB接口,重写了接口中的方法,并在方法中调用了被适配器类Adaptee(键盘)
*/
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter() {
}
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
@Override
public void handle() {
adaptee.request();
}
}
这个时候电脑就可以通过适配器调用键盘了
/*
* 客户端类-------电脑(只有USB接口)
*/
public class Client {
public void test(Target t){
t.handle();
}
public static void main(String[] args) {
//电脑
Client c = new Client();
//键盘
Adaptee adaptee = new Adaptee();
//适配器
Target t = new Adapter(adaptee);
c.test(t);
}
}
console:
可以完成客户端需要的功能!