1、 概述
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2、模式中的角色
- 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
- 需要适配的类(Adaptee):需要适配的类或适配者类。
- 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
3、结构图
4、代码实现
// 定义客户端期待的接口
public class Target {
public void request() {
System.out.println("This is a common request");
}
}
// 定义需要适配的类
public class NeedAdapter {
public void specificRequest(){
System.out.println("This is a special request.");
}
}
// 定义适配器
public class Adapter extends Target{
// 建立一个私有的NeedAdapter 对象
private NeedAdapter needAdapter = new NeedAdapter();
//通过重写,表面上调用request()方法,变成了实际调用specificRequest()
public void request(){
needAdapter .specificRequest();
}
}
具体调用:
// 对客户端来说,调用的就是Target的request()
Target target = new Adapter();
target.request();
5、使用场景
- 系统需要使用现有的类,而这些类的接口不符合系统的接口。
- 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
- 两个类所做的事情相同或相似,但是具有不同接口的时候。
- 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
- 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
参考文章设计模式学习笔记-适配器模式