适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。
适配器模式:类的适配器模式,对象的适配器模式
1,类的适配器模式
类的适配器模式把被适配的类的api转换成为目标类的api
目标角色:这既是所期待得到的接口,注意,由于这里讨论的是类适配器模式,因此目标不可以是类
源角色:现有需要适配的接口
适配器角色:适配器把源接口转换成目标接口
public class Adaptee
{
public void operation1(){}
}
public interface Target
{
public abstract void operator1();
public abstract void operator2();
}
public class Adapter extends Adaptee implements Target
{
public void operator2()
{
System.out.println("adaptee operator2!");
}
}
public class Client
{
public static void main(String[] args)
{
Target target=new Adapter();
target.operator1();
target.operator2();
}
}
使用一个具体类把源适配到目标中,这样一来,如果源以及源的子类都使用此类适配,就行不通了,由于适配器类是源的子类,因此可以在适配器类中置换掉源的一些方法,由于只引进了一个适配器类,因此只有一个路线到达目标类,使问题得到简化。
2,对象的适配器模式
对象的适配器模式把源类的api转换成为目标类的api,与类的适配器模式不同的是,对象的适配器模式不是使用基础关系链接到源类,而是使用委派关系链接到源类。
目标角色:这就是所期待的接口,目标可以是具体的或抽象的类
源角色:现在需要适配的接口
适配器角色:把源接口转换成目标接口。
public interface Target
{
public abstract void sampleOperation1();
public abstract void sampleOperation2();
}
public class AdapteeTwo
{
public void sampleOperation1(){}
}
public class Adapter implements Target
{
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
super();
this.adaptee=adaptee;
}
public void sampleOperation1()
{
adaptee.sampleOperation1();
}
public void sampleOperation2()
{
System.out.println("自己的操作!");
}
}
适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换,这里面包括适配器角色补充了一个源角色没有的办法。