- 定义
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而
不能一起工作的那些类可以一起工作。
- 接口和说明
- 简单实例:
- package adaptersimple.example1;
/**
* 已经存在的接口,这个接口需要被适配
*
*
*/
public class Adaptee {
/**
* 示意方法,原本已经存在,已经实现的方法
*/
public void specificRequest() {
//具体的功能处理
}
} - 适配器
-
public class Adapter implements Target {
/**
* 持有需要被适配的接口对象
*/
private Adaptee adaptee;
/**
* 构造方法,传入需要被适配的对象
*/
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {//可能转调已经实现了的方法,进行适配
adaptee.specificRequest();
} -
/**
* 使用适配器的客户端
*/
public class Client{
public static void main(String[] args) {
//创建需要被适配的对象
Adaptee adaptee = new Adaptee();
//创建客户端需要调用的接口对象
Target target = new Adapter(adaptee);
//请求处理
target.request();
}
} -
/**
* 定义客户端使用的接口,与特定领域相关
*/
public interface Target {
/**
* 示意方法,客户端请求处理的方法
*/
public void request();
} - 适配器模式的功能
-
1、 适配器模式的主要功能就是进行转换匹配,目的是复用已有的功能,而不是来实现新的接口。
2、适配器里面也可以实现功能,称这种适配器为智能适配器。
四、adaptee和target的关系
适配器模式中被适配的接口Adaptee和适配称为的接口Target是没有关联的。
五、适配器的调用模式
- 对象组合
-
适配器的实现方式其实是依靠对象组合的方式。
- 适配的常见实例
- 适配器通常是一个类,一般会让适配器类去实现Target接口,然后在适配器的具体实现里面调用Adaptee。
- 可以在适配器的实现里面,加入新功能的实现,这种适配器被称为智能适配器。
- 适配多个Adaptee
- 适配器Adapter实现的复杂程度
-
适配器Adapter实现的复杂程度,取决于Target和Adaptee的相似程度。
- 缺省适配
-
缺省适配的意思是:为一个接口提供缺省实现
-
适配器模式的优缺点
1:更好的复用性
2:更好的可扩展性
3:过多的使用适配器,会让系统非常凌乱,不容易整体进行把握。
适配器模式的本质
适配器模式的本质是:转换匹配,复用功能
何时选用适配器模式
1、如果你想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式。
来把已有的实现转换成你需要的接口。
2、如果你想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时需要什么
就适配什么。
3、如果你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,
直接适配这些子类的父类就可以了。