适配器Adapter模式
什么是适配器模式?
- 将一个类的接口转换成客户端所希望的另一个接口,Adapter模式使用原本由于接口不兼容而不能在一起工作的那些类可以在一起工作。
模式中的角色:
- 目标接口(Target):客户所期待的接口,目标可以是具体的或者抽象的类,也可以是接口。
- 需要适配的类(Adaptee):需要适配的类或者适配者类。
- 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
创建目标接口:
package cn.fllday.adapter;
public interface Target {
void handleReq();
}
创建需要适配的类:
package cn.fllday.adapter;
/**
* 创建需要被适配的类
* @author gssznb
*
*/
public class Adaptee {
public void request() {
System.out.println("可以完成客户所需要的功能!");
}
}
创建适配器:
package cn.fllday.adapter;
/**
* 适配器 (对象适配器方式,使用了组合的方式跟被适配对象 , 也可以使用继承的方式。)
* 相当于Usb 与 ps/2的转接口
* @author gssznb
*
*/
public class Adapter implements Target{
// 创建Adaptee 的对象 关联起来
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
/**
* 这个时候就可以使用客户端 Client 类 通过使用Target 来使用 Adaptee的打字功能了
*/
@Override
public void handleReq() {
adaptee.request();
}
}
使用Client 调用
package cn.fllday.adapter;
/**
* 客户端类
* 相当于一个笔记本,只拥有usb接口
* @author gssznb
*
*/
public class Client {
public void test(Target t) {
t.handleReq();
}
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target t = new Adapter(adaptee);
new Client().test(t);
}
}
应用场景:
工作中的场景:
- 经常用来做旧系统改造和升级
- 如果我们的系统开发之后再也不需要维护,那么许多模式是不必要的。但是不幸运的是,事实确实维护一个系统的代价往往是开发一个系统的倍数。
学习中遇到的场景:
- java.io.InputStreamReader(InputStream)
- java.io.OutputStreamWriter(OutputStream)