适配器模式
1.定义
-
适配器模式,将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
-
适配器模式的原型代码
package cn.sun.code.seventeen.basic;
/**
* 这是客户所期待的接口。目标可以是具体的或者抽象的类,也可以是接口
*/
public class Target {
public void request() {
System.out.println("普通请求");
}
}
/**
* 需要适配的类
*/
class Adaptee {
public void specificRequest() {
System.out.println("特殊请求");
}
}
/**
* 通过在内部包装一个Adaptee对象,把源接口转换成目标接口
*/
class Adapter extends Target {
// 建立一个私有的Adaptee对象
private Adaptee adaptee = new Adaptee();
// 这样就可以吧表面上调用request()方法变成实际调用SpecificRequest()方法
@Override
public void request() {
adaptee.specificRequest();
}
}
/**
* 客户端代码
*/
class Client {
public static void main(String[] args) {
Target target = new Adapter();
// 对于客户端来说,其实调用的就是Target的request()方法
target.request();
}
}
2.为什么使用适配器模式
- 适配器模式的两个使用阶段及其对应场景
- 软件开发的后期或维护期
- 在想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑适配器模式。
- 这种情况下使用适配器模式有点“亡羊补牢”的感觉,也就是说在系统维护的后期,系统不能轻易改动,此时可以使用适配器模式。如果是在系统设计初期,那么尽量遵循统一的规范,不要出现这种接口不一致情形。
- 程序设计之初
- 在设计一个系统时考虑使用第三方开发组件,而这个组件的接口与我们自己的系统接口是不相同的,而我们也完全没有必要为了迎合它而改动自己的接口,此时尽管在开发的设计阶段,也可考虑使用适配器模式来解决接口不同的问题。
- 也就是说,如果出现这种接口使用的不匹配问题,首先想的是重构系统;但如果实在不能改动系统时再使用适配器模式。
- 软件开发的后期或维护期
3.适配器模式在Java中的应用
java.io.InputStreamReader(InputStream)
(返回一个 Reader)java.io.OutputStreamWriter(OutputStream)
(返回一个 Writer)- 暂时空置,等整理完框架源码相关部分补充。