适配器模式
适配器模式(Adapter Pattern)就是对一个类做适配,使之符合客户端的需求,能够正常的工作。
就像是变压器(Adapter),美国的生活电压是110V,中国的是220V,美国的电器要在中国使用就需要加上一个变压器(Adapter)。
适配器模式也被称为包装模式(Wrapper Pattern),将已有的类进行包装,使之具有需求所需的接口。
适配器模式有以下两种:类的适配器模式和对象的适配器模式。

类的适配器模式的类图关系如下:

Target:目标角色,包含所有期望拥有的接口
Adaptee:现有的类,需做适配
Adapter:适配Adaptee符合Target
public interface Target {
void sampleOperation1();
void sampleOperation2();
}
public class Adaptee {
public void sampleOperation1(){}
}
public class Adapter extends Adaptee implements Target {
public void sampleOperation2(){
// Write your code here
}
}
对象的适配器模式的类图关系如下:

对象的适配器模式与类的适配器模式的区别在于: Adapter与Adaptee的关系不是继承,而是关联。 Adapter直接调用Adaptee。
public class Adapter implements Target {
public Adapter(Adaptee adaptee){
super();
this.adaptee = adaptee;
}
public void sampleOperation1(){
adaptee.sampleOperation1();
}
public void sampleOperation2(){
// Write your code here
}
private Adaptee adaptee;
}
下面的情况下可以考虑使用适配器:
1.系统需要使用现有的类,但是现有类的接口又不符合。
2.需要创建一个可以重复使用的类,用于一些彼此没有太大关联的类,包括一些可能在将来引进的类。
Enumeration接口较Iterator较早出现在JDK中,2者之间如果不做转换,使用起来是比较麻烦的。可能定义了一个Iterator,但方法的参数是Enumeration。
下面就是Iterator适配到Enumeration的类图。

public class Itermeration implements Enumeration{
private Iterator it;
public Itermeration(Iterator it)
{
this.it = it;
}
public boolean hasMoreElements()
{
return it.hasNext();
}
public Object nextElement() throws NoSuchElementException
{
return it.next();
}
}
JDBC使得Java语言可以连接到数据库,并使用SQL操作数据。各具体的数据库要适配JDBC使其能够适用于具体的数据库连接。

使用适配器模式时有一些需要注意的事:
1.目标接口可以省略,源是一个接口,适配器需要实现源中的方法,可以不必实现不需要的方法,见缺省适配模式。
2.适配器可以是抽象类,见缺省适配模式。
3.带参数的适配器模式,适配器可以根据参数返回一个合适的类给客户端。
浙公网安备 33010602011771号