将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。
适用情况:
使用的前提是:接口中规定了所有要实现的方法; 但一个要实现此接口的具体类,只用到了其中的几个方法,而其它的方法都是没有用的。
实现方法:
用一个抽象类实现已有的接口,并实现接口中所规定的所有方法,这些方法的实现可以都是空方法;
原本要实现接口的子类,只实现上面的抽象类即可,并在其内部实现时,只对其感兴趣的方法进行实现;
类图:
角色:
目标接口(Target): 客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee): 需要适配的类或适配者类。
适配器(Adapter): 通过包装一个需要适配的对象,把原接口转换成目标接口。
实例:
public interface Target
{
public void request();
}
public class Adaptee
{
public void specialRequest()
{
System.out.println("this is special request");
}
}
public class Adapter implements Target
{
Adaptee adaptee = new Adaptee();
@Override
public void request()
{
adaptee.specialRequest();
}
}
public class Client
{
public static void main(final String[] args)
{
final Target adapter = new Adapter();
adapter.request();
}
}
主要内容:
1) 类适配器
当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。
2)对象适配器
对象适配器通过组合除了满足"用户期待的接口"还降低了代码间的不良耦合。
3)缺省适配器
缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是空方法,而具体的子类都要继承此抽象类。