1、Adapter适配器模式,是一种接口型模式。它将一个或多个类的接口,转换成客户所期望的接口。
2、它的宗旨是:基于现有类所提供的服务,向客户提供接口,以满足客户的期望。
3、实现:创建一个客户所需接口的类,然后包装现有类的方法,这样就包含了被适配对象。
4、主要有两种类型:类适配器和对象适配器。
<wbr><wbr> a 当客户指定需求接口时,我们通常可以创建一个新类,来实现接口和扩展现有类。这样我们就创建了一个类适配器,它将把客户的调用,转变为调用现有类的方法。</wbr></wbr>
<wbr><wbr> b 为了满足客户的需求接口,我们实现了这个接口,但此时不能扩展现有类(例如,我们已经扩展了一个抽象类),或者逻辑意义上不存在扩展关系,些时,通过委派给一个现有的类,来实现客户所需接口。这样我们就创建了一个对象适配器,部分解决了适配一个对象到一个没有明确定义的接口的问题。</wbr></wbr>
5、适用情况:你希望使用他人所编写的程序或方法,因为你需要它所执行的功能;你无法将这个子程序直接加入程序中;子程序的接口或调用方式,与所需要的接口,不完全相同。
6、示例。
类适配器:
public interface RequiredInterface{
<wbr><wbr><wbr><wbr><wbr><wbr> public void requiredMethod();</wbr></wbr></wbr></wbr></wbr></wbr>
}
public class ExistingClass{
<wbr><wbr><wbr><wbr><wbr><wbr> public void usefulMethod(){</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> .......</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr>
}
public class NewClass extends ExistingClass implements RequiredInterface{
<wbr><wbr><wbr><wbr><wbr> public void requiredMethod(){</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> usefulMethod();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>..........</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr>
}
对象适配器:
public class RequiredClass{
<wbr><wbr><wbr><wbr><wbr><wbr> public void requiredMethod(){</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ..........</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr>
}
public class ExistingClass{
<wbr><wbr><wbr><wbr><wbr><wbr> public void usefulMethod(){</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> .......</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr>
}
public class NewClass extends RequiredClass{
<wbr><wbr><wbr><wbr><wbr> private ExistingClass existingClass;</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> public NewClass(ExistingClass existingClass){</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> this.existingClass = existingClass;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> public void requiredMethod(){</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> existingClass.usefulMethod();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>..........</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr>
}