意图
使接口不兼容的类能协同工作。
结构
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
包括类的适配器模式和对象的适配器模式两种不同的形式。
使接口不兼容的类能协同工作。
结构
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
包括类的适配器模式和对象的适配器模式两种不同的形式。
模式的角色如下:
目标(Target)角色:这就是所期待得到的接口。注意这里讨论的是类的适配器模式,因此目标不可以是类。
源(Adaptee)角色:现有需要适配的接口。
适配器(Adapter)角色:把源接口转换成目标接口。
类的适配器模式
Target;
public interface Target
{
void sampleOperation1();
void sampleOperation2();//源类不包含的方法
}// END INTERFACE DEFINITION Target
Adaptee;
public class Adaptee
{
public void sampleOperation1()
{
}
}// END CLASS DEFINITION Adaptee
Adapter;
public class Adapter : Adaptee,Target
{
public void sampleOperation2()
{
}
}// END CLASS DEFINITION Adapter
public interface Target
{
void sampleOperation1();
void sampleOperation2();//源类不包含的方法
}// END INTERFACE DEFINITION Target
Adaptee;
public class Adaptee
{
public void sampleOperation1()
{
}
}// END CLASS DEFINITION Adaptee
Adapter;
public class Adapter : Adaptee,Target
{
public void sampleOperation2()
{
}
}// END CLASS DEFINITION Adapter
类的适配器模式的效果:
使用一个具体类把源适配到目标中,这样一来,如果源以及源的子类都使用此类适配,就形不通了。
由于适配器类是源的子类,因此可以在适配器类中置换掉(Override)源的一些方法。
结构
Target;
public interface Target
{
void sampleOperation1();
void sampleOperation2();
}// END INTERFACE DEFINITION Target
Adaptee;
public class Adaptee
{
public void sampleOperation1()
{
}
}// END CLASS DEFINITION Adaptee
Adapter:
public class Adapter : Target
{
private Adaptee adaptee;
public void Adapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}
public void sampleOperation1()
{
adaptee.sampleOperation1();
}
public void sampleOperation2()
{
}
}// END CLASS DEFINITION Adapter
public interface Target
{
void sampleOperation1();
void sampleOperation2();
}// END INTERFACE DEFINITION Target
Adaptee;
public class Adaptee
{
public void sampleOperation1()
{
}
}// END CLASS DEFINITION Adaptee
Adapter:
public class Adapter : Target
{
private Adaptee adaptee;
public void Adapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}
public void sampleOperation1()
{
adaptee.sampleOperation1();
}
public void sampleOperation2()
{
}
}// END CLASS DEFINITION Adapter
对象适配器模式的效果:
一个适配器可以把多种不同的源适配到同一个目标。也就是说,同一个适配器可以把源类和它的子类都适配到目标接口。
与类的适配器相比,要想置换源类的方法就不容易。如果一定要置换源类的方法,就只好先做一个源类的子类,将方法置换掉,再把源类的子类当作真正的源进行适配。
使用场合
1.需要使用一个已经存在的类,但接口与设计要求不符。
2.希望创建一个可以重复使用的类,但该类可以与其它不相关的类或者是将来不可预见的类协同工作。
.NET中的适配器DataAdapter