将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
有时,为复用而设计的工具箱类不能够被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。
适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。
一、类的适配器模式
类的适配器模式把适配的类的API转换成目标类的API。
- 目标(Target)角色:这就是所期待得到的接口。
- 源(Adaptee)角色:现有需要适配的接口。
- 适配器(Adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然这一角色不可以是接口,而必须是具体类。
/**
* 定义Client使用的与特定领域相关的接口
*/
public interface Target {
void sampleOperation1();
void sampleOperation2();
}
/**
* 定义一个已经存在的接口,这个接口需要适配
*/
public class Adaptee {
public void sampleOperation1() {
// ......
}
}
/**
* 对Adaptee与Target接口进行适配
*/
public class Adapter extends Adaptee implements Target {
public void sampleOperation2() {
// ......
}
}
二、对象适配器
与类的适配器模式一样,对象适配器模式把适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。示意代码如下:
/**
* 定义Client使用的与特定领域相关的接口
*/
public interface Target {
void sampleOperation1();
void sampleOperation2();
}
/**
* 定义一个已经存在的接口,这个接口需要适配
*/
public class Adaptee {
public void sampleOperation1() {
// ......
}
}
/**
* 对Adaptee与Target接口进行适配
*/
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
public void sampleOperation1() {
adaptee.sampleOperation1();
}
public void sampleOperation2() {
// ......
}
}
类适配器模式和对象适配器模式的异同:Target接口和Adaptee类都相同,不同的是类适配器的Adapter继承Adaptee实现Target,对象适配器的Adapter实现Target聚集Adaptee。
适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换。
三、JDBC驱动软件与适配器模式
JDBC给出一个客户端通用的界面,每个数据库引擎的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器软件。
posted on 2006-07-11 08:52
保尔任 阅读(915)
评论(0) 编辑 收藏 所属分类:
Design Patten