适配器模式(Adapter模式)
把一个类的接口转换成客户端所期待的另一种接口,从而使原接口不匹配而无法在一起工作的两个类能在一起工作。
如果有两个编译好的(无源代码)类,类A有某些功能,但是需要一个xml读取模块才能工作,
这个模块要实现这个接口:
public interface XmlReader {
public InputStream xmlReader();
}
你的另一个类B恰好有这个功能,但是B实现的是这个接口:
public interface ReaderXml {
public InputStream readerXml();
}
这个时候我们的做法是写个适配器
public class Adapter implements XmlReader extends B{
public InputStream xmlReader(){
return readerXml();
}
}
适配器模式的几个要素
目标、客户、被适配者、适配器。
目标(CTarget):定义一个客户端使用的特定接口。
客户(CClient):使用目标接口,与和目标接口一致的对象合作。
被适配者(CAdaptee):一个现存需要匹配的接口。
适配器(CAdapter):负责将CAdaptee的接口转换成CTarget的接口。适配器是一个具体的类,这是本模式的核心。
适配器分类
适配器总体上可以分为 类适配器 和 对象适配器。
类适配器和对象适配器的不同
类适配器是通过继承类适配者类(Adaptee Class)实现的,另外类适配器实现客户类所需要的接口。当客户对象调用适配器类方法的时候,适配器内部调用它所继承的适配者的方法。对象适配器包含一个适配器者的引用(reference),与类适配器相同,对象适配器也实现了客户类需要的接口。当客户对象调用对象适配器的方法的时候,对象适配器调它所包含的适配器者实例的适当方法。